我想在我的Picture控件上显示一个位图, 但实际上无论我在尝试什么,它都无法运作。 现在我的方法看起来像这样:
SendDlgItemMessage(hWnd ,picture_CTRL, BM_SETIMAGE , IMAGE_BITMAP, (LPARAM) MAKEINTRESOURCE(IDB_BITMAP1));
我也已经尝试过使用
STM_SETIMAGE
消息,但它也无法正常工作。 我的Picture Control属性“Type”设置为“Bitmap”,我的Bitmap在resource.h中有一个ID
希望你们能帮忙:)。
答案 0 :(得分:3)
首先,您不能只在标准Windows控件中混合和匹配消息。 BM_SETIMAGE
和STM_SETIMAGE
具有完全不同的值。如果您使用的是静态控件,请使用STM_SETIMAGE
。如果您使用的是Button控件,请使用BM_SETIMAGE
。
其次,documentation for STM_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));
请注意,根据文档,您负责在完成后删除位图。
编辑:请注意,我在原始版本的代码中遇到了两个问题,这两个问题都是由复制和粘贴问题引起的。我没有像LPARAM
那样自己传递句柄,而是使用了BM_SETIMAGE
而不是STM_SETIMAGE
。我还将在答案中添加一个注释,正如Cody Gray所指出的,函数或消息的MSDN文档将告诉您是否可以使用MAKEINTRESOURCE
。