c++ - Windows XP 上的真彩色 CImageList

标签 c++ visual-studio-2008 mfc

我在 CDialog 中有以下代码。此代码在 Windows 7 上完美运行,但在 Windows XP SP3 上它的颜色始终为黑色。

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 的参数成员函数。

你有什么想法吗?

非常感谢您的帮助。

最佳答案

您还没有初始化您的 memDC,所以它没有正确响应。在执行 SelectObject 选择位图之前,请执行以下操作:

memDC.CreateCompatibleDC(pDC);

关于c++ - Windows XP 上的真彩色 CImageList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8063156/

相关文章:

c++ - 如何从 char * 转换为 "WTF::String"?

c++ - Scheduler::instance().clock() 返回什么?

c++ - CFile Copy 方法修复文件访问被拒绝问题

c# - 我的 C++ 项目需要一个 GUI

C++ STL : Container Recreation or Reuse after clearing?

c++ - std::set 和 boost::ptr_set 之间的区别?

c# - 如何在 Visual Studio/C# 中定义 DLL 依赖项的工作目录

C++ Map无法插入对

visual-studio-2010 - 在Visual C++中比较图像和视频

c++ - 重写 MFC 应用程序的 LoadString