C ++将资源中的位图添加到图片控件

时间:2013-07-26 12:33:54

标签: c++ bitmap picturebox

我想在我的Picture控件上显示一个位图, 但实际上无论我在尝试什么,它都无法运作。 现在我的方法看起来像这样:

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

我也已经尝试过使用

STM_SETIMAGE 

消息,但它也无法正常工作。 我的Picture Control属性“Type”设置为“Bitmap”,我的Bitmap在resource.h中有一个ID

希望你们能帮忙:)。

1 个答案:

答案 0 :(得分:3)

首先,您不能只在标准Windows控件中混合和匹配消息。 BM_SETIMAGESTM_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