我正在使用GDI +顯示位圖。從DLL資源加載位圖後,我使用TransparentBlt將背景顏色(藍色 - #0000FF)設置爲透明。在Windows Vista和更高版本上,按預期工作。爲什麼GDI +顏色會根據工具提示是否可見而變化?
但是,在我們測試的Windows XP系統上,只有在顯示任何工具提示(例如IE中的「title」屬性,或將鼠標懸停在文件上時顯示的Windows資源管理器的工具提示)時才能使用。剩下的時間背景顏色仍然是藍色的。
有沒有人遇到過這種情況,或知道一種方法來阻止這種情況的發生,並使藍色適當變得透明?
編輯:經過進一步調查後,我發現將Windows XP中的顏色深度設置爲16位顏色而不是32位顏色,導致TransparentBlt再次開始正常工作。顯然,這不是一個理想的解決方案,指定必須使用哪種顏色深度,但是這是否會提示可能發生的情況?
編輯2:包括代碼示例。
m_pGDIBitmap = new Gdiplus::Bitmap(_Module.m_hInst, MAKEINTRESOURCE(lImageResource));
m_hMemDC = CreateCompatibleDC(hdc);
Gdiplus::Graphics myGraphics(m_hMemDC);
myGraphics.DrawImage(m_pGDIBitmap,
Gdiplus::Rect(0, 0, m_pGDIBitmap->GetWidth(), m_pGDIBitmap->GetHeight()),
0,
0,
m_pGDIBitmap->GetWidth(),
m_pGDIBitmap->GetHeight(),
Gdiplus::UnitPixel, &imAtt);
SetStretchBltMode(hdc, HALFTONE);
SetBrushOrgEx(hdc, rcBounds.left, rcBounds.top, NULL);
TransparentBlt(hdc, rcBounds.left, rcBounds.top, iScaledWidth, iScaledHeight, m_hMemDC, 0, 0, iBitmapWidth, iBitmapHeight, GetPixel(m_hMemDC, 0, 0));
愚蠢的問題,但如果你選擇了不同的顏色,也會發生同樣的問題嗎? – 2010-05-03 05:02:48
不幸的是。我用同樣的結果嘗試黑色。 – dlanod 2010-05-03 07:00:54