我在CDialog中有以下代碼。此代碼在Windows 7上完美工作,但在Windows XP SP3上其顏色始終爲黑色。Windows XP上的真彩CImageList
UINT color_flags = CWindowDC(this).GetDeviceCaps(BITSPIXEL);
switch (color_flags)
{
case 4 : color_flags = ILC_COLOR4; break;
case 8 : color_flags = ILC_COLOR8; break;
case 16 : color_flags = ILC_COLOR16; break;
case 24 : color_flags = ILC_COLOR24; break;
case 32 : color_flags = ILC_COLOR24; break;
default : color_flags = ILC_COLOR24;
};
CImageList imgage_list;
imgage_list.Create(16, 16, color_flags, 0, 10);
imgage_list.SetImageCount(number_of_bitmaps);
CDC * pDC = this->GetDC();
CDC memDC;
CRect memRect(0, 0, 16, 16);
CObject * pObj = 0;
COLORREF my_color = RGB(255,0,0);
CBitmap * bitmap = 0;
memDC.CreateCompatibleDC(pDC);
for (int i = 0; i < number_of_bitmaps; ++i)
{
bitmap = new CBitmap;
bitmap->CreateCompatibleBitmap(pDC, 16, 16);
pObj = memDC.SelectObject(bitmap);
memDC.FillSolidRect(memRect, my_color);
imgage_list.Replace(i, bitmap, 0);
memDC.SelectObject(pObj);
delete bitmap;
}
memDC.DeleteDC();
this->ReleaseDC(pDC);
我啓用了視覺樣式,如MSDN所示。我使用這個CImageList對象作爲CListCtrl::SetImageList成員函數的參數。
你有什麼想法嗎?
非常感謝您的幫助。
只看代碼看起來沒問題,您可以驗證CImageList替換成員:如果返回不正確,則返回零。這是我調試的開始... – Sunscreen
@防曬:如果我用CImage寫出CBitmap,顏色是正確的。如果我從資源填充CImageList,則列表是正確的。所以我完全困惑。 :( – Naszta
在Windows XP中,您是否正在加載通用控件6或5.0?您是否正確包含了清單? – sarat