如何在对话框上显示一张图片

在对话框上显示一张图片,可能是一个比较常用的功能,在MFC中提供了OnPaint()绘图函数,下面结合这个函数,提供 几种在对话框上显示一张图片的代码。首先假设你有一张24位的图片,放在e:\下,然后建立一个dialog based的MFC程序。

  • 利用picture control显示

拖动一个picture control到dialog上,ID为IDC_PICTURE,然后在OnPaint()函数下的else条件下加入如下代码:


HBITMAP   hBitmap;
//get the picture control which is on the dialog
CStatic   *pStatic   =   (CStatic*)GetDlgItem(IDC_PICTURE);
//load the file
hBitmap   =   (HBITMAP)LoadImage(NULL, "E:\\2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
pStatic->ModifyStyle(0xF,   SS_BITMAP);
//show the file on the picture control
pStatic->SetBitmap(hBitmap);
  • 利用CImage类显示

加上头文件:#include <atlimage.h>
在OnPaint()函数下的else条件下加入如下代码:


CImage img;
img.Load("E:\\2.BMP");
img.Draw(this->GetDC()->GetSafeHdc(), 0, 0, img.GetWidth(), img.GetHeight(), 0, 0, img.GetWidth(), img.GetHeight());
  • 利用BitBlt()函数显示

在OnPaint()函数下的else条件下加入如下代码:


CDC memdc;
CClientDC dc(this);void* flag = LoadImage(NULL, "E:\\2.BMP", IMAGE_BITMAP, 0,0,LR_LOADFROMFILE);//CBitmap defindes a series of operation on image files
CBitmap   *bitmap   =   CBitmap::FromHandle((HBITMAP)flag);  //BITMAP is bmp file
BITMAP     temp;
bitmap->GetBitmap(&temp);  //temp.bmBits = (unsigned char*)malloc(temp.bmHeight*temp.bmWidth*3);
//bitmap->GetBitmapBits(temp.bmHeight*temp.bmWidth, temp.bmBits); //get the height and the width
int heigth =temp.bmHeight;
int width =temp.bmWidth;  memdc.CreateCompatibleDC(&dc);
memdc.SelectObject(bitmap);   //dc.FillSolidRect((GetSystemMetrics(SM_CXSCREEN)-m_Length)/2,  (GetSystemMetrics(SM_CYSCREEN)-m_Width)/2, m_Length,m_Width,RGB(0,0,255));
//dc.BitBlt(     0,0, width, heigth, &memdc, 0, 0,      SRCCOPY);
//dc.StretchBlt(50, 50, 300, 300, &memdc, 0, 0, heigth,  width,  SRCCOPY);  //BitBlt() is faster than StretchBlt()
dc.BitBlt(     0,0, width, heigth, &memdc, 0, 0,      SRCCOPY);
DeleteObject(bitmap); 
  • 利用SetDIBitsToDevice函数显示

在OnPaint()函数下的else条件下加入如下代码:


CClientDC dc(this);<br/>
void* flag = LoadImage(NULL, "E:\\2.BMP", IMAGE_BITMAP, 0,0,LR_LOADFROMFILE);
//CBitmap defindes a series of operation on image files
CBitmap   *bitmap   =   CBitmap::FromHandle((HBITMAP)flag);
//BITMAP is bmp file
BITMAP     temp;
bitmap->GetBitmap(&temp);
int height = temp.bmHeight;
int widht = temp.bmWidth;temp.bmBits = (unsigned char*)malloc(temp.bmHeight*temp.bmWidth*4);
bitmap->GetBitmapBits(height*widht*4, temp.bmBits);BITMAPINFO * info = new BITMAPINFO;
info->bmiHeader.biBitCount = temp.bmBitsPixel;
info->bmiHeader.biClrImportant = 0;
info->bmiHeader.biHeight = temp.bmHeight;
info->bmiHeader.biWidth = temp.bmWidth;
info->bmiHeader.biPlanes = temp.bmPlanes;
info->bmiHeader.biClrUsed = 0;
info->bmiHeader.biCompression = 0;
info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info->bmiHeader.biSizeImage = height*widht*3;
info->bmiHeader.biXPelsPerMeter = 0;
info->bmiHeader.biYPelsPerMeter = 0;SetDIBitsToDevice(dc, 0, 0, widht, height,0,0, 0, height, temp.bmBits, info, DIB_RGB_COLORS);  

经过测试,在显示速度上,第四种方法是最快的,其次是第三种,前两种速度好像差不多。 若建立的是MFC single document, 找到view类下的onDraw()函数,图片显示是类似的。

http://iiec.cqu.edu.cn/wiki/index.php/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AF%B9%E8%AF%9D%E6%A1%86%E4%B8%8A%E6%98%BE%E7%A4%BA%E4%B8%80%E5%BC%A0%E5%9B%BE%E7%89%87

如何在对话框上显示一张图片相关推荐

  1. java 对话框 显示图片_Java对话框上显示图片

    手掌心 其实有很多种方法可以解决图片显示大小的问题:使用photoshop修改. 优点是可以节省系统资源, 显示图片的时候,不用做处理,缺点是需要了解ps的基本操作使用JDialog 自定义对话框. ...

  2. 在你的对话框上查看Revit模型的各个视图

    转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/8123505 作者:  叶雄进 , Autodesk ADN 接到 ...

  3. vc++ 6.0对话框上无法显示中文(乱码)

    是英文版的vc++,建立mfc向导时无法选择中文,到对话框里面改成中文还是乱码,怎么版啊 问题补充: 一般对话框是可以的,就是那个CPropertyPage 不可以对话框资源选成中文以后要ReBuil ...

  4. php上传多张图片为什么只显示一张,javascript,_js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次???,javascript - phpStudy...

    js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? self.$els.upload ...

  5. VC实现对话框上信息的显示

    利用 VC的AppWizard,可以很容易地实现工具条和菜单项的ToolTip,或在状态条上显示帮助信息,但要在对话框的控件上显示ToolTip和在状态条上显示控件信息并不容易实现.现在,我们用VC中 ...

  6. 在一张图片上显示热力图(前端)

    在一张图片上显示热力图 #实现这个功能主要是用到heatmap.js 当echarts的热力图不能满足我们的需求的时候,背景不需要地图 就可以使用heatmap 最简单的例子 只需要给盒子设置一个背景 ...

  7. Django Admin 上传多张图片并显示缩略图

    Django Admin 上传多张图片并显示缩略图 文章目录 Django Admin 上传多张图片并显示缩略图 1.效果预览 2.自定义Widget 3.定义模型和模型表单 3.1 定义模型 3.2 ...

  8. 如何使对话框程序启动以及主窗口最小化时不在任务栏上显示

    时下流行的许多软件,如QQ,迅雷等,启动主程序以及主窗口最小化时,不在任务栏上显示按钮,这是怎么做到的呢? 首先说主窗口启动时不再任务栏上显示按钮的问题 方法1,将主窗口的属性设置为WS_EX_TOO ...

  9. Android-客户端上传多张图片到服务器功能实现

    服务端: 需要两个jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar 代码: <span style="font-famil ...

最新文章

  1. 【SVN多用户开发】代码冲突解决办法
  2. stm32对c语言要求高吗?c语言什么水平可以学stm32?
  3. Redis是如何写代码注释的?
  4. linux deb文件安装_如何在 Ubuntu 上安装 VirtualBox | Linux 中国
  5. javascript数据结构-栈
  6. B端数据表格设计实战指南(建议收藏)
  7. 8.0强行转换后变成了7_如何在服务器上安装SSL证书,让你的网站变成https
  8. 婚纱摄影五大标杆品牌告诉你,客资转化居然可以这么玩?
  9. 国内移动CRM市场规模不及salesforce年营收3%
  10. 基于Mesos和Docker的分布式计算平台
  11. Linux3.2.8系统启动过程及启动延时初步分析
  12. CSS背景图片自适应大小
  13. 计算机专业考研 数学分析,(NEW)中山大学数据科学与计算机学院数学分析(A)历年考研真题汇编.pdf...
  14. linux下列目录清单用命令,Linux入门必看的Is命令实用范例!
  15. 公司电脑加域之后用不了USB但是可以用鼠标键盘得解决方法
  16. 如何关闭谷歌浏览器Google Chrome的阅读清单功能
  17. 解决:torch, torch-scatter, torch-sparse, torch-cluster, torch-spline-conv 版本不匹配而导致的问题
  18. Linux下编写C语言
  19. CXF 处理yyyy-MM-dd HH:mm:ss日期失败
  20. CA Server证书申请与颁发 Apache2 HTTPS

热门文章

  1. 阿里集团2015实习生招聘内部推荐
  2. Flask 路由、请求、会话
  3. p6spy-自动填充日志中SQL的查询条件
  4. 输出数据库设计文档Pgsql版本
  5. 邮件变成了Winmail.dat
  6. 【大米粒计数】基于matlab GUI形态学大米粒颗粒识别【含Matlab源码 915期】
  7. echarts柱状图,不同颜色,立体,lable不同颜色,lable有背景图。
  8. pikachu 靶场搭建(完整版)
  9. 简历上计算机操作水平,简历上计算机能力的填写方法
  10. inCreate自图入选中国软件网《创新100—2022数智化场景实践》