QQ登录

只需一步,快速开始

44上位机VC MFC用CFileDialog实现位图预览

[ 复制链接 ]

44上位机VC MFC用CFileDialog实现位图预览

44上位机VC MFC用CFileDialog实现位图预览

44上位机VC MFC用CFileDialog实现位图预览


功能展示

在使用对话框 打开位图时,如果能够对图片进行预览就可以让用户更加快捷的选择想要的图片,我们可以使用微软提供的CFileDialog进行IDY,满足我们的程序功能;效果如图
要点提示
文件对话框类CFileDialog有一个数据成员m_ofn,该成员为OPENFILENAME结构体变量,这个结构体包含了一组成员,其中Flags是初始化对话框的一组标记,lpTemplateName用于提供文件对话框的子对话框 窗口,如果Flags中包含OFN_EXPLORER标记,系统将创建一个标准的对话框。如果我们想要设计自己的文件对话框,我们可以从CFileDialog派生创建一个新的对话框,在新的对话框中添加控件,然后将其赋给lpTemplateName,如m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DIALOG1);IDD_DIALOG1为我们自己创建 的对话框 ID;,这样我们就将这个对话框嵌入到CFileDialog的标准对话框当中了
实现功能
1.新建基于对话框的应用程序
2.再新建一对话框资源添加一些控件,关联对话框到一个CFileDialog类;

3.添加对话框的初始化函数OnInitDialog() ,并对对话框的变量初始化,如我们当前例程
  1. BOOL CBmpDlg::OnInitDialog()
  2. {
  3.         CFileDialog::OnInitDialog();
  4.         m_Bitmap.SubclassDlgItem(IDC_STATIC1,this);        //控件关联ID
  5.         m_Measure.SubclassDlgItem(IDC_STATIC2,this);
  6.         m_Size.SubclassDlgItem(IDC_STATIC3,this);
  7.         m_Time.SubclassDlgItem(IDC_STATIC4,this);        
  8.         return TRUE;
  9. }
复制代码


4.在对话框的构造函数中修改m_ofn.Flags及m_ofn.lpTemplateName的值  m_ofn.Flags = (OFN_EXPLORER|OFN_ENABLETEMPLATE| OFN_ENABLEHOOK);
m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DIALOG1);IDD_DIALOG1为我们自己建立对话框 ID;

5.手动添加这个对话框类的虚函数OnFileNameChange()如我们例程中实现了我们位图预览的功能
  1. void CBmpDlg::OnFileNameChange()
  2. {
  3.         CString exp;
  4.         exp=GetFileExt();
  5.         exp.MakeUpper(); //在比较扩展名时不区分大小写
  6.         if(exp == "BMP") //显示位图
  7.         {
  8.                 CFile file;
  9.                 if(!file.Open(GetPathName(),CFile::modeRead) )
  10.                         return;
  11.                 BITMAPFILEHEADER bmfHeader;
  12.                 //读位图文件头信息
  13.                 if(file.Read((LPSTR)&bmfHeader,sizeof(bmfHeader)) != sizeof(bmfHeader))
  14.                         return;
  15.                 //读位图头信息
  16.                 BITMAPINFOHEADER bmiHeader;
  17.                 if(file.Read((LPSTR)&bmiHeader, sizeof(bmiHeader)) !=sizeof(bmiHeader))
  18.                         return ;
  19.                 //获得大小信息,并显示
  20.                 int bmWidth = bmiHeader.biWidth;
  21.                 int bmHeight = bmiHeader.biHeight;
  22.                 file.Close();
  23.                 int x=150,y=150;
  24.                 if(bmWidth < 150)
  25.                         x = bmWidth;
  26.                 if(bmHeight < 150)
  27.                         y = bmHeight;
  28.                 m_Bitmap.SetBitmap((HBITMAP)LoadImage(NULL,GetPathName(),IMAGE_BITMAP,x,y,LR_LOADFROMFILE));
  29. //><        
复制代码
  1. //><        
  2.                 CFileStatus status;
  3.                 CFile::GetStatus(GetPathName(),status);
  4.                 CString  measure,size,time;
  5.                 measure.Format("图像尺寸:%d*%d",bmWidth,bmHeight);
  6.                 m_Measure.SetWindowText(measure);//显示位图尺寸

  7.                 size.Format("文件大小:%dK",status.m_size/1024);
  8.                 m_Size.SetWindowText(size);//显示位图大小

  9.                 time.Format("创建时间:%s",status.m_ctime.Format("%Y年%m月%d日 %H:%M:%S"));
  10.                 m_Time.SetWindowText(time);//显示创建的位图时间
  11.         }
  12. }
复制代码
5.最后当然是在主对话框中调用我们自己DIY的对话框,记得添加头文件
  CBmpDlgdlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|
  OFN_EXPLORER|OFN_ENABLETEMPLATE,"AllFiles(*.BMP)|*.BMP||");
  dlg.DoModal();

我们来演示下功能实现的整个过程
源码及视频下载
(仅在电脑可见)

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:44.上位机VC MFC用CFileDialog实现位图预览.rar 
文件大小:249.17 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索