首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

一个字形窗体制作中SelectObject的使用有关问题,希望有人能解释哈

2012-04-06 
一个字形窗体制作中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)

[解决办法]
探讨
在其它地方下的一个打包的150个实例 ...

噢噢,这个函数成功的时候返回被替换的那个对象?

[解决办法]
探讨
引用:

引用:
在其它地方下的一个打包的150个实例 ...

噢噢,这个函数成功的时候返回被替换的那个对象?

是的,是对象的句柄

这样改变过窗口之后,窗口句柄hWnd应该不会变化吧?
还有这里面哪些是GDI对象,
我只知道用API,用一个了解很多概念,
这个第一次用 ...

热点排行