我的目标是在内存中创建一个位图,并将其句柄用作 BM_SETIMAGE 消息(设置按钮位图的消息)的参数。
以下是我的代码:
........
HDC hdc = GetDC(hwnd);
HDC memDC = CreateCompatibleDC(hdc);
HBITMAP hMemBmp = CreateCompatibleBitmap(hdc, 100, 100);
HBITMAP hOldBmp = (HBITMAP)SelectObject(memDC, hMemBmp);
Rectangle(memDC, 0, 0, 100, 100);
HBRUSH brush = CreateSolidBrush(RGB(0xff, 0xff, 0x00));
RECT rc;
rc.left = 0;
rc.top = 0;
rc.right = 100;
rc.bottom = 100;
FillRect(memDC, &rc, brush);
SendMessage(GetDlgItem(hDlg, IDC_SET_START_PAGE_BG), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hMemBmp);
........
但它不起作用,我的按钮上只有黑色。
问题:
FillRect(memDC, &rc, Brush)
是否修改了hMemBmp的内容?如果没有,SelectObject(memDC, hMemBmp)
对这两个对象做了什么?我应该使用
CreateBitmap
而不是CreateCompatibleBitmap
来完成我的任务吗?
最佳答案
在发送消息之前,您应该将旧位图选回内存 DC。 According to MSDN一次只能将位图选择到单个 DC 中。
关于在内存中创建位图并使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14146180/