看看这两张照片:
Windows 7:
XP:
如您所见,XP案例中没有图像。
在这篇文章http://social.msdn.microsoft.com/Forums/da-DK/vcmfcatl/thread/6f9b1f03-0c67-4af4-a187-e135fdd1411c中,似乎是PUSHBUTTON with BS_BITMAP style doesn't work on XP
。这是正确的吗?
如果是的话,如何在XP上做类似的事情?
在资源脚本文件中,我将按钮设置为样式BS_BITMAP,以下是与设置图像相关的代码:
static INT_PTR CALLBACK Dialog_Color_Proc(...)
{
....
case WM_INITDIALOG:
....
SetColorDlgButtonColor(hDlg, IDC_SET_START_PAGE_BG, prefs->bgColor);
....
}
void SetColorDlgButtonColor(HWND hDlg, int nIDDlgItem, COLORREF color)
{
HWND hButton = GetDlgItem(hDlg, nIDDlgItem);
HDC hdc = GetDC(hButton);
HDC memDC = CreateCompatibleDC(hdc);
int dx = ClientRect(hButton).dx;
int dy = ClientRect(hButton).dx;
HBITMAP hMemBmp = CreateCompatibleBitmap(hdc, dx, dy);
HBITMAP hOldBmp = (HBITMAP)SelectObject(memDC, hMemBmp);
Rectangle(memDC, 0, 0, dx, dy);
RECT rc;
rc.left = 0;
rc.top = 0;
rc.right = dx;
rc.bottom = dy;
HBRUSH brush = CreateSolidBrush(color);
FillRect(memDC, &rc, brush);
SelectObject(memDC, hOldBmp);
SendMessage(GetDlgItem(hDlg, nIDDlgItem), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hMemBmp);
DeleteObject(brush);
DeleteObject(hMemBmp);
DeleteObject(memDC);
}