無論屏幕顏色深度如何,我如何創建32b HBITMAP和HDC ?
很簡單:
BITMAPINFO bmp_info = {};
bmp_info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmp_info.bmiHeader.biWidth = width;
bmp_info.bmiHeader.biHeight = height;
bmp_info.bmiHeader.biPlanes = 1;
bmp_info.bmiHeader.biBitCount = 32;
bmp_info.bmiHeader.biCompression = BI_RGB;
HDC mem_dc = CreateCompatibleDC(0);
void *dummy;
HBITMAP bitmap_handle = CreateDIBSection(mem_dc, &bmp_info, DIB_RGB_COLORS, &dummy, NULL, 0);
SelectObject(mem_dc, bitmap_handle));
現在在這個DC繪製你的按鈕。請記住檢查錯誤並釋放資源。
或者,你的按鈕參考視圖自動轉換到實際的桌面模式:
HWND desktop = GetDesktopWindow();
HDC desktop_dc = GetDC(desktop);
HDC mem_dc = CreateCompatibleDC(desktop_dc);
RECT rect;
GetClientRect(desktop, &rect);
HBITMAP bitmap_handle = CreateCompatibleBitmap(desktop_dc, rect.right - rect.left, rect.bottom - rect.top);
SelectObject(mem_dc, bitmap_handle);
現在在mem_dc
使用BitBlt預裝載的圖像。它會自動轉換爲當前的桌面彩色模式
我試過這段代碼,但似乎是從0(屏幕)創建mem_dc再次使它16b,所以它不起作用。 – 2011-02-11 16:51:12
@Roman:我在我的32bpp顏色窗口上成功創建了mem_dc爲4bpp,8bpp和16bpp。你的意思是升級不起作用嗎?請重新檢查。這個問題也可能與代碼相關,比較你的結果和參考圖像 – 2011-02-11 17:50:55