首先,您不能只是在标准 Windows 控件中混合和匹配消息。BM_SETIMAGE
并STM_SETIMAGE
具有完全不同的价值观。如果您使用的是静态控件,请使用STM_SETIMAGE
. 如果您使用的是 Button 控件,请使用BM_SETIMAGE
.
其次,文档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
.