MFC对话框中如何动态加载png图片

在编写mfc对话框时,经常会用到图片控件,用来直观显示目标对象的外观样式。对于静态位图bmp,在对话框上显示非常简单,只需将该图片插入资源中,在对话框上引用即可。而对于动态切换png图片的场景,例如切换下拉框的同时切换示意图片,mfc同样提供了解决方案。

在切换下拉框时,动态加载所需png图片。

在OnPaint函数中绘制图片

void OnListBoxChange()
{
    // 这里的路径可以按需修改
    std::string filePath = "D:\\test.png";

    // 动态加载png图片
    if (m_Image) m_Image.Detach();
    if (m_Image.Load(filePath.c_str()) == S_OK)
    {
      // 重绘图片控件
      CRect rect;
      GetDlgItem(IDC_STATIC_PICTURE)->GetWindowRect(&rect);
      ScreenToClient(rect);
      InvalidateRect(rect);
    }
  }
  
void OnPaint()
{  
    CDialogEx::OnPaint();

    if (m_Image)
    {
      CPaintDC dc(GetDlgItem(IDC_STATIC_PICTURE));
      CRect rectClient;
      GetDlgItem(IDC_STATIC_PICTURE)->GetClientRect(&rectClient);

      // 图片对象关联
      CBitmap bitMap;
      bitMap.Attach(m_Image);

      // 创建图片绘图设备dc
      CDC dcMemory;
      dcMemory.CreateCompatibleDC(&dc);
      auto pOldObject = dcMemory.SelectObject(&bitMap);

      // 复制图片到图片控件
      // 当图片与控件尺寸一致时,使用BitBlt函数
      // 如果不一致时,使用StretchBlt函数进行缩放
      //dc.BitBlt()
      dc.StretchBlt(rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height(),
        &dcMemory, 0, 0, m_Image.GetWidth(), m_Image.GetHeight(), SRCCOPY);
      dcMemory.SelectObject(pOldObject);
    }
  }

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值