首先,您不能只是在标准 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.