【问题标题】:C++ Add A Bitmap from resource to Picture ControlC ++将位图从资源添加到图片控制
【发布时间】:2013-07-26 17:28:36
【问题描述】:

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

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

我也已经尝试过使用

STM_SETIMAGE 

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

希望大家帮忙:)

【问题讨论】:

    标签: c++ bitmap picturebox


    【解决方案1】:

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

    【讨论】:

    • +1 很好地总结了这些问题。值得指出的是,在可以使用MAKEINTRESOURCE宏的情况下,文档中会明确说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2018-07-16
    • 2011-03-17
    • 1970-01-01
    相关资源
    最近更新 更多