如何在对话框上显示一张图片
如何在对话框上显示一张图片
在对话框上显示一张图片,可能是一个比较常用的功能,在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
如何在对话框上显示一张图片相关推荐
- java 对话框 显示图片_Java对话框上显示图片
手掌心 其实有很多种方法可以解决图片显示大小的问题:使用photoshop修改. 优点是可以节省系统资源, 显示图片的时候,不用做处理,缺点是需要了解ps的基本操作使用JDialog 自定义对话框. ...
- 在你的对话框上查看Revit模型的各个视图
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/8123505 作者: 叶雄进 , Autodesk ADN 接到 ...
- vc++ 6.0对话框上无法显示中文(乱码)
是英文版的vc++,建立mfc向导时无法选择中文,到对话框里面改成中文还是乱码,怎么版啊 问题补充: 一般对话框是可以的,就是那个CPropertyPage 不可以对话框资源选成中文以后要ReBuil ...
- php上传多张图片为什么只显示一张,javascript,_js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次???,javascript - phpStudy...
js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? self.$els.upload ...
- VC实现对话框上信息的显示
利用 VC的AppWizard,可以很容易地实现工具条和菜单项的ToolTip,或在状态条上显示帮助信息,但要在对话框的控件上显示ToolTip和在状态条上显示控件信息并不容易实现.现在,我们用VC中 ...
- 在一张图片上显示热力图(前端)
在一张图片上显示热力图 #实现这个功能主要是用到heatmap.js 当echarts的热力图不能满足我们的需求的时候,背景不需要地图 就可以使用heatmap 最简单的例子 只需要给盒子设置一个背景 ...
- Django Admin 上传多张图片并显示缩略图
Django Admin 上传多张图片并显示缩略图 文章目录 Django Admin 上传多张图片并显示缩略图 1.效果预览 2.自定义Widget 3.定义模型和模型表单 3.1 定义模型 3.2 ...
- 如何使对话框程序启动以及主窗口最小化时不在任务栏上显示
时下流行的许多软件,如QQ,迅雷等,启动主程序以及主窗口最小化时,不在任务栏上显示按钮,这是怎么做到的呢? 首先说主窗口启动时不再任务栏上显示按钮的问题 方法1,将主窗口的属性设置为WS_EX_TOO ...
- Android-客户端上传多张图片到服务器功能实现
服务端: 需要两个jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar 代码: <span style="font-famil ...
最新文章
- 【SVN多用户开发】代码冲突解决办法
- stm32对c语言要求高吗?c语言什么水平可以学stm32?
- Redis是如何写代码注释的?
- linux deb文件安装_如何在 Ubuntu 上安装 VirtualBox | Linux 中国
- javascript数据结构-栈
- B端数据表格设计实战指南(建议收藏)
- 8.0强行转换后变成了7_如何在服务器上安装SSL证书,让你的网站变成https
- 婚纱摄影五大标杆品牌告诉你,客资转化居然可以这么玩?
- 国内移动CRM市场规模不及salesforce年营收3%
- 基于Mesos和Docker的分布式计算平台
- Linux3.2.8系统启动过程及启动延时初步分析
- CSS背景图片自适应大小
- 计算机专业考研 数学分析,(NEW)中山大学数据科学与计算机学院数学分析(A)历年考研真题汇编.pdf...
- linux下列目录清单用命令,Linux入门必看的Is命令实用范例!
- 公司电脑加域之后用不了USB但是可以用鼠标键盘得解决方法
- 如何关闭谷歌浏览器Google Chrome的阅读清单功能
- 解决:torch, torch-scatter, torch-sparse, torch-cluster, torch-spline-conv 版本不匹配而导致的问题
- Linux下编写C语言
- CXF 处理yyyy-MM-dd HH:mm:ss日期失败
- CA Server证书申请与颁发 Apache2 HTTPS