1. 1、添加一个Picture Control,关联变量为 m_picture,定义一个全局变量CString m_path.
  2. 2、添加一个打开jpg图片的按钮,并添加按钮事件:void ...Dlg::OnOpen()。
  3. void ...Dlg::OnOpen()
  4. {
  5. CFileDialog cfd(true,_T(".jpg"),NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,_T("Executable   Files   (*.jpg)|*.jpg|All   Files   (*.*)|*.*||"),this);     //选项图片的约定
  6. if(cfd.DoModal()!=IDOK)        //判断是否获得图片
  7. {
  8. return;
  9. }
  10. m_path = cfd.GetPathName();    //获得图片路径
  11. UpdateData(false);             //更新路径公共变量
  12. ShowPicture();                 //调用显示图片函数
  13. }
  14. 3、添加函数void ...Dlg::ShowPicture(void)。
  15. void ...Dlg::ShowPicture(void)
  16. {
  17. if(m_path=="")        //判断图片路径是否存在
  18. {
  19. return;
  20. }
  21. //AfxMessageBox(_T("读取到图片路径"));
  22. CRect rect;
  23. m_picture.GetClientRect(&rect);     //m_picture为Picture Control控件变量,获得控件的区域对象
  24. CImage image;       //使用图片类
  25. image.Load(m_path);   //装载路径下图片信息到图片类
  26. CDC* pDC = m_picture.GetWindowDC();    //获得显示控件的DC
  27. image.Draw( pDC -> m_hDC,rect);      //图片类的图片绘制Draw函数
  28. ReleaseDC(pDC);
  29. }
  30. 4、在void ...Dlg::OnPaint()添加:
  31. void ...Dlg::OnPaint()
  32. {
  33. if (IsIconic())
  34. {
  35. ....
  36. }
  37. else
  38. {
  39. CDialog::OnPaint();
  40. CDialog::UpdateWindow(); //更新windows窗口
  41. ShowPicture();     //重绘图片函数
  42. }
  43. }

1.若出现CImage未定义,则包含进头文件:#include <atlimage.h>.

2.若出现:stdafx.obj : error LNK2005: "class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > m_path" (?m_path@@3V?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@A)

说明头文件中的变量定义可能出问题了。

我是在stdafx.h头文件中定义了:

CString m_path;    出错;

后将此定义放到我的.C文件中直接定义,编译通过。

3.清除JPG图片:

CStatic* pStatic= (CStatic*)GetDlgItem(IDC_STATIC1);

pStatic->SetBitmap(NULL);

我用:

             m_picture.SetBitmap(NULL);
UpdateData(false);             //更新路径公共变量
ShowPicture();                 //调用显示图片函数

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

vc中对话框动态显示图片

VC中要是想动态显示个图片是很麻烦的,可不是设置个文件路径就简单完事的。

网上的资料很多,但是都是出于同一个地方,学习来的看不懂的还是看不懂。而且有些地方存在问题。所以我想把这个教程稍微完善下,不方便公开自己写的代码了。

我们要完成的是,在一个对话框中建立一个图片显示的范围,当我们点击下一张按钮时,这个区域会按照预定设好的顺序显示某个文件夹下的图片。

新建MFC应用程序,对话框模式。

1,在预定区域动态载入图片:核心思想是通过CBitmap,HBITMAP,直接用OnPaint()绘制。

首先在CShowPicDlg类中声明一个变量:CBitmap m_bmp; 双击CShowPicDlg类,光标自动调到class CShowPicDlg : public CDialog处,在protected 之前声明一个全局变量,输入CBitmap m_bmp;

2,在对话框资源中加入一个picture 标签,名为IDC_STATIC1。打开ClassWinzard(类向导),在ObjectIDs中选中CShowPicDlg,在下面的Member Functions里找OnInitDialog,双击它所在行,光标自动调到BOOL CShowPicDlg::OnInitDialog处。或者,更简单,在左侧类显示栏里找到OnInitDialog,双击,光标自动导向。然后,对照下面的程序修改BOOL CShowPicDlg::OnInitDialog里的内容。

这是在子对话框初始化得时候添加的位置,如果想点击“下一张”在更换的话,需要将大括号里的代码放到按钮相关函数的大括号里。

BOOL CShowPicDlg::OnInitDialog()

{
      CDialog::OnInitDialog();

if( m_bmp.m_hObject != NULL )//判断
         m_bmp.DeleteObject();

/载入图片

HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),

"c://aaa.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);

if( hbmp == NULL )

return FALSE;

///该断程序用来取得加载的BMP的信息

m_bmp.Attach( hbmp );

DIBSECTION ds;

BITMAPINFOHEADER &bminfo = ds.dsBmih;

m_bmp.GetObject( sizeof(ds), &ds );

int cx=bminfo.biWidth;//得到图像宽度

int cy=bminfo.biHeight; //得到图像高度

///

/得到了图像的宽度和高度后,我们就可以对图像大小进行适应,即调整控件的大小,让它正好显示一张图片///

CRect rect;

GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect);

ScreenToClient(&rect);

GetDlgItem(IDC_STATIC1)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小

InvalidateRect(rect);   //刷新对话框区域 这里很重要!如果不加这句,新更换的图片将不刷新!

return TRUE;// return TRUE unless you set the focus to a control

// EXCEPTION: OCX Property Pages should return FALSE

}

3,图片加载成功了,标签大小也适应了,下面就是绘制绘制图像了。打开classwinzard类向导,重载WM_PAINT消息,或者,更简单的方法,在左侧类显示栏里CShowPicDlg里找到OnPaint() ,双击,光标自动导向。

这里有个事情需要强调,当你的对话框为子对话框时,cpp文件里并没有OnPaint(),你需要在头文件中选择重写函数,选择onpaint()。

void CShowPicDlg::OnPaint()

{

//以下三种情况任选一种会是不同效果(只能一种存在)///

//CPaintDC dc(this);//若用此句,得到的是对话框的DC,图片将被绘制在对话框上.

CPaintDC dc(GetDlgItem(IDC_STATIC1)); //用此句,得到picture控件的DC,图像将被绘制在控件上,建议用此句

//CDC dc;

//dc.m_hDC=::GetDC(NULL);//若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上///

CRect rcclient;

GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient);

CDC memdc;

memdc.CreateCompatibleDC(&dc);

CBitmap bitmap;

bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());

memdc.SelectObject( &bitmap );

CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);

CDC maskdc;

maskdc.CreateCompatibleDC(&dc);

CBitmap maskbitmap;

maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);

maskdc.SelectObject( &maskbitmap );

maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,

rcclient.left, rcclient.top, SRCCOPY);

CBrush brush;

brush.CreatePatternBrush(&m_bmp);

dc.FillRect(rcclient, &brush);

dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),

&memdc, rcclient.left, rcclient.top,SRCPAINT);

brush.DeleteObject();

// Do not call CDialog::OnPaint() for painting messages

}

对话框中显示jpg,bmp图片和对话框动态显示图片相关推荐

  1. 在单文档中显示我的第一个对话框

    在单文档中显示我的第一个对话框 (2010-04-19 21:19:50) 转载▼ 标签: it   今天编写了在单文档中创建对话框以及调用对话框的代码,收获很多: 1:OnInitDialog函数的 ...

  2. 在MFC对话框中显示html网页

    最近在写一个小软件,想在MFC对话框中显示帮助文档,都是html格式的,上网找了好多资料,用一个CHtmlCtrl类的东西,但是网上找的这个类放在VS2005下编译不过去,老是提示错误.于是几经修改, ...

  3. 我的VC++——对话框中显示GIF格式的图片

    PictureEx图片显示类支持以下格式的图片:GIF (including animated GIF87a and GIF89a), JPEG, BMP, WMF, ICO, CUR等,我特别推崇的 ...

  4. MFC对话框中显示图片的四种方法

    先分类如下: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基于对话框的工程,名为T ...

  5. 在MFC对话框中显示图片的三种方法(有两种使用OpenCv)

    最近写了一个用对话框显示图片的程序,这里将学习到的东西整理一下: 编程环境:VC6.0+OpenCv1.0 准备工作:用VC6.0生成一个对话框外壳(全被采用默认设置),然后在对话框中添加一个静态控件 ...

  6. [转]如何将属性表嵌入对话框中显示

    [最终结果图] [简单设计流程] 1. 创建工程:根据VC向导程序创建一个Dialog Based应用程序,进入资源视图,在对话框模板上创建一个Picture控件来设置属性页的显示范围,调整好Pict ...

  7. css大图切割,利用CSS切割图片技术来动态显示图片

    利用CSS切割图片来切换图片 .img2 { position:absolute; clip:rect(0px 20px 20px 0px); } .img1 { position:absolute; ...

  8. html实现图片切割,利用CSS切割图片技术来动态显示图片

    利用CSS切割图片来切换图片 .img2 { position:absolute; clip:rect(0px 20px 20px 0px); } .img1 { position:absolute; ...

  9. VC MFC程序,在About对话框中获取并显示程序的版本号

    =================================================本文为HeYuanHui原作 转载必须确保本文完整并完整保留原作者信息及本文原始链接! NN:     ...

最新文章

  1. CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS
  2. npm WARN saveError ENOENT: no such file or directory, open ‘/Users/....../package.json‘的解决办法
  3. 学习python需要什么基础-学习Python需要哪些基础知识?
  4. w7怎么查看电脑配置_2020年之学习UI设计需要什么样的电脑配置?
  5. 服务器mysql数据库安装教程视频教程_MySQL数据库管理系统安装实际操作_MySQL教程视频 - 动力节点...
  6. jmeter实现翻页功能_JMeter定制功能实现
  7. 解决select2在bootstrap的modal中默认不显示的问题
  8. Mybatis-plus插入数据遇到主键没有默认值的问题
  9. 随机生成26大写字母
  10. Flutter BindingBase服务扩展浅析
  11. slickedit使用
  12. 安卓开发之ListView优化方案
  13. Franka Emika机械臂快速入门教程
  14. 企业微信开发整理汇总
  15. DRAM知识整理系列(三):部分时序参数整理
  16. 传销三级的认定标准_主观明知在传销犯罪中有那么重要吗?
  17. 无限城app为什么服务器繁忙,鬼灭之刃:无惨为什么敢一人前往无限城,其实他最大底牌就是上五...
  18. 第一行代码 第三版 第11章网络技术 11.6.1 Retrofit 应用 报错:android.system.ErrnoException: isConnected failed: ECONNRE
  19. appium第一个脚本
  20. 设计模式之Reactor反应堆

热门文章

  1. java wms erp自动化立体仓库管理系统 进出
  2. windows2016服务器优化,注册表优化Windows Server 2016 大全
  3. 深度相机学习(一)Kinect的配置
  4. 华为防火墙重启_华为防火墙常用命令
  5. 使用单相变频电源有哪些优势呢?
  6. 【R语言可视化】-- 柱状图要点一网打尽
  7. MySQL-SQL优化10大最经典案例详解
  8. 使用者——初见Pixhawk
  9. 码云小课题 | 主流开源协议有哪些?我们该如何选择?
  10. maven-compiler-plugin和maven-jar-plugin报错飘红