我想在图片控件上显示位图, 但实际上无论我尝试什么,它都不起作用。 现在我的方法是这样的:
SendDlgItemMessage(hWnd ,picture_CTRL, BM_SETIMAGE , IMAGE_BITMAP, (LPARAM) MAKEINTRESOURCE(IDB_BITMAP1));
我也已经尝试过使用
STM_SETIMAGE
消息,但它也不起作用。 我的 Picture Control 属性“Type”设置为“Bitmap”并且我的 Bitmap 在 resource.h 中有一个 ID
希望大家能帮忙:)
最佳答案
首先,您不能只是在标准 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
。
关于C++ 将位图从资源添加到图片控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17881433/