1

我想在我的图片控件上显示一个位图,但实际上无论我尝试什么,它都不起作用。现在我的方法是这样的:

SendDlgItemMessage(hWnd ,picture_CTRL, BM_SETIMAGE , IMAGE_BITMAP, (LPARAM) MAKEINTRESOURCE(IDB_BITMAP1));

我也已经尝试过使用

STM_SETIMAGE 

消息,但它也不会起作用。我的优化校准属性“类型”设置为“位图”,并且我的位图在 resource.h 中有一个 ID

希望大家能帮忙:)

4

1 回答 1

3

首先,您不能只是在标准 Windows 控件中混合和匹配消息。BM_SETIMAGESTM_SETIMAGE具有完全不同的价值观。如果您使用的是静态控件,请使用STM_SETIMAGE. 如果您使用的是 Button 控件,请使用BM_SETIMAGE.

其次,文档STM_SETIMAGELPARAM必须是图像的句柄。您正在传递一个资源 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.

于 2013-07-26T13:27:53.663 回答