一个字形窗体制作中SelectObject的使用问题,希望有人能解释哈VB codePrivate Sub Form_Load()Dim dc As Lo
一个字形窗体制作中SelectObject的使用问题,希望有人能解释哈
- VB code
Private Sub Form_Load() Dim dc As Long Dim m_wndRgn As Long Dim m_Font As Long Dim m_OldFont As Long dc = Me.hdc m_Font = CreateFont(200, 90, 0, 0, FW_HEAVY, 1, 0, _ 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, _ CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, _ DEFAULT_PITCH Or FF_SWISS, "宋体") BeginPath dc '开始记录窗体轮廓路径 SetBkMode dc, TRANSPARENT '设置背景为透明模式,这是必须有的 fg = SelectObject(dc, m_Font) TextOut dc, 0, 0, "VB6", 3 SelectObject dc, m_OldFont EndPath dc '结束记录窗体轮廓路径 m_wndRgn = PathToRegion(dc) '把所记录的路径转化为窗体轮廓句柄 SetWindowRgn Me.hWnd, m_wndRgn, True '赋予窗体指定的轮廓形状End Sub
这是窗体源代码
我不理解其中的两次SelectObject的作用,为何要用SelectObject?
[解决办法]
1、SelectObject,把GDI对象选入设备环境(DC)中,系统将用你选入的对象进行绘制,这里你选的是字体对象;
2、为何用两次?原来的DC中是有字体对象的并且一种类型的类象只能有一个,把你的字体对象选入后,SelectObject将返回原来的字体对象,你画完后SelectObject dc, m_OldFont又把原来的字体对象选入DC中,为什么这样做?你首先要明白,绘制你的窗体的代码并不仅仅只有你的,其它程序也可能绘制你的窗体,如果你不SelectObject dc, m_OldFont,其它程序就有可能用你创建的字体来绘制,当然不会有正确的结果了。所以通常都要恢复原来的DC
[解决办法]
不知你从那贴来的代码
fg = SelectObject(dc, m_Font)
应是
m_OldFont=SelectObject(dc, m_Font)
[解决办法]
[解决办法]
