CMFCButton::SetImage - 位图不会显示

Emi*_*ile 5 c++ winapi mfc

我试图加载位图我用的功能按钮SetImageCMFCButton。我没有收到任何错误或其他东西,只是一个简单的按钮。我正在做同样的事情icons并且它可以工作,但我也需要加载它bitmap。我需要LoadImage从路径而不是从资源。

这是我的代码:

iconResource = path + m_type + _T("U") + extension; //i.e : C:\test\earthU.bmp
HANDLE hIcon =  ::LoadImage(nullptr, iconResource, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
//same thing for Hot and Disable bitmap
Run Code Online (Sandbox Code Playgroud)

以及对SetImage函数的调用:

SetImage((HBITMAP)hIcon, 0, (HBITMAP)hIconHot, 0 , (HBITMAP)hIconDis);
Run Code Online (Sandbox Code Playgroud)

Bar*_*ani 2

LR_CREATEDIBSECTION|LR_LOADFROMFILE加载位图文件时使用标志CMFCButton

::LoadImage(nullptr, bitmapfile, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
Run Code Online (Sandbox Code Playgroud)

部分解释:

CMFCButton( )的 MFC 源代码"afxbutton.cpp"显示它添加了LR_CREATEDIBSECTIONfor LoadImage。这没有记录,也不清楚为什么需要这样做。LR_CREATEDIBSECTION当源位图不是 32 位时似乎需要它。

  • MFC 可能添加了“LR_CREATEDIBSECTION”,以便它可以在内部访问图像的规范表示。本质上与将所有日期时间保留为 UTC 类似:无论环境如何,信息都是真实的。DIB 中的“DI”毕竟意味着“设备独立”,设备是 DDB 需要正确解释的外部状态。如果您有时间,请在 [CMFCButton](https://learn.microsoft.com/en-us/cpp/mfc/reference/cmfcbutton-class) 文档页面上发布问题。 (3认同)