先看gdi32中DC的数据结构:
typedef struct tagDC
{
···省略其他和此讨论无关的数据
HPEN hPen;
HBRUSH hBrush;
HFONT hFont;
HBITMAP hBitmap;
···省略其他和此讨论无关的数据
} DC;
再看VB代码:
hDC = CreateCompatibleDC(ByVal 0&)
hBmp = CreateBitmap(Width, Height, GetDeviceCaps(hDC, PLANES), _
GetDeviceCaps(hDC, BITSPIXEL), ByVal 0&)
hBrs = CreateSolidBrush(BackColor)
hBitmap_old = SelectObject(hDC, hBmp) '?1
hBrush_old = SelectObject(hDC, hBrs) '?2
SelectObject在C++中会根据传入的hBmp、hBrs类型不同,选择不同的函数体。
但VB中hBmp、hBrs都是long
所以我有以下猜测:
'?1:把hBmp和 hDC关联,难道函数会根据hBmp,检测一下hBmp所指的对象的数据结构,然后把hBmp 赋给DC.hBitmap?
'?2:把hBrs和 hDC关联,难道函数会根据hBrs,检测一下hBrs所指的对象的数据结构,然后把hBrs 赋给DC.hBrush?
所以上面代码运行后:hBrush_old 不等于 hBmp?
typedef struct tagDC
{
···省略其他和此讨论无关的数据
HPEN hPen;
HBRUSH hBrush;
HFONT hFont;
HBITMAP hBitmap;
···省略其他和此讨论无关的数据
} DC;
再看VB代码:
hDC = CreateCompatibleDC(ByVal 0&)
hBmp = CreateBitmap(Width, Height, GetDeviceCaps(hDC, PLANES), _
GetDeviceCaps(hDC, BITSPIXEL), ByVal 0&)
hBrs = CreateSolidBrush(BackColor)
hBitmap_old = SelectObject(hDC, hBmp) '?1
hBrush_old = SelectObject(hDC, hBrs) '?2
SelectObject在C++中会根据传入的hBmp、hBrs类型不同,选择不同的函数体。
但VB中hBmp、hBrs都是long
所以我有以下猜测:
'?1:把hBmp和 hDC关联,难道函数会根据hBmp,检测一下hBmp所指的对象的数据结构,然后把hBmp 赋给DC.hBitmap?
'?2:把hBrs和 hDC关联,难道函数会根据hBrs,检测一下hBrs所指的对象的数据结构,然后把hBrs 赋给DC.hBrush?
所以上面代码运行后:hBrush_old 不等于 hBmp?
