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

标签 c++ bitmap picturebox

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

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

我也已经尝试过使用

STM_SETIMAGE 

消息,但它也不起作用。 我的 Picture Control 属性“Type”设置为“Bitmap”并且我的 Bitmap 在 resource.h 中有一个 ID

希望大家能帮忙:)

最佳答案

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

关于C++ 将位图从资源添加到图片控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17881433/

相关文章:

c++ - float 学精度,c++ vs fortran

c++ - 以 10 为基数到 n 基数的转换

android - 向临时缓存文件android写入和读取位图时出错?

android - 在 Canvas 中更好的帧率绘制位图?

java - 用Java处理图像,而不是标签

c# - 图片框 图片框

c++ - std::map 是否自动平衡自身

c++ - 根据 C++ 标准的语法解析数字文字的不一致

delphi - 从 TOleContainer 中提取位图?

c# - 只绘制矩形的角