0
我的目標是在內存中創建一個位圖,並使用它的句柄作爲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
來完成我的任務嗎?
謝謝,它的工作原理。所以在SelectObject(memDC,hOldBmp)之後,hMemBmp被選入hdc並且hOldBmp被選入memDC,對嗎? – user565739
@ user565739:不,沒有人選擇「hdc」。在該行之後'hMemBmp'將與任何DC分離並且具有內部圖像 - 這正是'BM_SETIMAGE'期望的內容 - 包含圖像的未附加位圖。 –