C++ C++;将位图从资源添加到图片控件
我想在图片控件上显示位图, 但事实上,无论我尝试什么,它都不起作用。 现在我的方法如下所示:C++ C++;将位图从资源添加到图片控件,c++,bitmap,picturebox,C++,Bitmap,Picturebox,我想在图片控件上显示位图, 但事实上,无论我尝试什么,它都不起作用。 现在我的方法如下所示: SendDlgItemMessage(hWnd ,picture_CTRL, BM_SETIMAGE , IMAGE_BITMAP, (LPARAM) MAKEINTRESOURCE(IDB_BITMAP1)); 我也已经尝试使用 STM_SETIMAGE 信息,但它不会工作得很好。 我的图片控件属性“Type”设置为“Bitmap”,并且我的位图在resource.h中有一个ID 希望你们能帮上
SendDlgItemMessage(hWnd ,picture_CTRL, BM_SETIMAGE , IMAGE_BITMAP, (LPARAM) MAKEINTRESOURCE(IDB_BITMAP1));
我也已经尝试使用
STM_SETIMAGE
信息,但它不会工作得很好。
我的图片控件属性“Type”设置为“Bitmap”,并且我的位图在resource.h中有一个ID
希望你们能帮上忙:)首先,你们不能在标准Windows控件中混用和匹配消息
BM_SETIMAGE
和STM_SETIMAGE
具有完全不同的值。如果您使用的是静态控件,请使用STM\u SETIMAGE
。如果您使用的是按钮控件,请使用BM\u SETIMAGE
其次,LPARAM
必须是映像的句柄。您正在传递一个资源ID。您需要先调用LoadImage
获取句柄。例如:
HBITMAP hBitmap = reinterpret_cast<HBITMAP>(LoadImage(
GetModuleHandle(NULL),
MAKEINTRESOURCE(IDB_BITMAP1),
IMAGE_BITMAP,
0,
0,
0));
SendDlgItemMessage(
hWnd,
picture_CTRL,
STM_SETIMAGE,
IMAGE_BITMAP,
reinterpret_cast<LPARAM>(hBitmap));
HBITMAP HBITMAP=reinterpret\u cast(加载图像(
GetModuleHandle(空),
MAKEINTRESOURCE(IDB_位图1),
图像/位图,
0,
0,
0));
SendDlgItemMessage(
hWnd,
图片\u CTRL,
STM_SETIMAGE,
图像/位图,
重新解释铸造(hBitmap);
请注意,根据文档,完成位图操作后,您有责任删除位图
编辑:请注意,在我的原始代码版本中有两个问题,都是由于复制和粘贴问题引起的。我自己未能将句柄作为
LPARAM
传递,我使用了BM_SETIMAGE
而不是STM_SETIMAGE
。我还将在回答中添加一个注释,正如Cody Gray指出的那样,函数或消息的MSDN文档将告诉您是否可以使用MAKEINTRESOURCE
+1问题的良好总结。值得指出的是,在可以使用MAKEINTRESOURCE
宏的情况下,文档中将清楚地指出这一点。