c++ - 将位图设置为 CStatic 对象

标签 c++ bitmap mfc picturebox

我正在尝试将一张位图添加到图片框中。这是我试过的:

void DlgError::Define_Image()
{
    // I generate all requiered elements.
    CBitmap bitmap;

    // Depending on the type of the message, I define the image to show.
    switch (Message_Type)
    {
        case Error: bitmap.LoadBitmap(IDB_ERROR); break;
        case Warning: break;

        case Information:
        default: bitmap.LoadBitmap(IDB_INFORMATION); break;
    }

    // I set the new picture.
    m_picture.ModifyStyle(0, SS_BITMAP);
    m_picture.SetBitmap(bitmap);
}

我不知道为什么它不起作用。我在某些论坛中有相同的代码。有谁能够帮助我?我必须定义一些额外的样式吗?

图片框的类型是Bitmap(可以卡在Picture control properties中)

解决方案

我必须说解决方案是两个答案的组合。最后,我定义了一个局部变量并使用下一段代码来执行我想要的操作。

void DlgError::Define_Image()
{
    // Depending on the type of the message, I define the image to show.
    switch (Message_Type)
    {
        case Error: bitmap.LoadBitmap(IDB_ERROR); break;
        case Warning: break;

        case Information:
        default: bitmap.LoadBitmap(IDB_INFORMATION); break;
    }

    // I set the new picture.
    m_picture.ModifyStyle(SS_ENHMETAFILE, SS_BITMAP);
    m_picture.SetBitmap(bitmap);
}

感谢所有帮助过我的人!

最佳答案

您正在使用 CBitmap 对象作为 Define_Image 函数中的局部变量。 一旦函数超出范围,位图就会被 CBitmap 对象的析构函数销毁(这里没有引用计数)。

您需要分离对象,然后将HBITMAP 句柄传递给CStaticSetBitmap

幸运的是,只需要一行:

 m_picture.SetBitmap((HBITMAP)bitmap.Detach());

关于c++ - 将位图设置为 CStatic 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59031765/

相关文章:

c++ - QPainter 在 OpenGl 中打破坐标系

winapi - GDI 函数 BitBlt 和 StretchBlt 在 Win32 中是否硬件加速?

java - Android位图像素操作返回黑色方 block

c++ - 使用 C++ 的 Win32/MFC 命名约定

c++ - 在使用时以编程方式弹出 USB 设备

c++ - 是否可以在编译时测试 C++ 中的类型是否支持负零?

c++ - 如何将请求的客户端连接的 IP 与 QTcpSocket 类中已识别的 IP 之一进行比较?

android - 使用 Android 自定义 Drawable

c++ - 如何通过给定序号将文件存储在文件夹中

c++ - 在 QTableView 中显示动画图标的最佳方式是什么?