工控编程吧
标题:
44上位机VC MFC用CFileDialog实现位图预览
[打印本页]
作者:
qq263946146
时间:
2015-11-28 12:40
标题:
44上位机VC MFC用CFileDialog实现位图预览
(, 下载次数: 5)
上传
点击文件名下载附件
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() ,并对对话框的变量初始化,如我们当前例程
BOOL CBmpDlg::OnInitDialog()
{
CFileDialog::OnInitDialog();
m_Bitmap.SubclassDlgItem(IDC_STATIC1,this); //控件关联ID
m_Measure.SubclassDlgItem(IDC_STATIC2,this);
m_Size.SubclassDlgItem(IDC_STATIC3,this);
m_Time.SubclassDlgItem(IDC_STATIC4,this);
return TRUE;
}
复制代码
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()如我们例程中实现了我们位图预览的功能
void CBmpDlg::OnFileNameChange()
{
CString exp;
exp=GetFileExt();
exp.MakeUpper(); //在比较扩展名时不区分大小写
if(exp == "BMP") //显示位图
{
CFile file;
if(!file.Open(GetPathName(),CFile::modeRead) )
return;
BITMAPFILEHEADER bmfHeader;
//读位图文件头信息
if(file.Read((LPSTR)&bmfHeader,sizeof(bmfHeader)) != sizeof(bmfHeader))
return;
//读位图头信息
BITMAPINFOHEADER bmiHeader;
if(file.Read((LPSTR)&bmiHeader, sizeof(bmiHeader)) !=sizeof(bmiHeader))
return ;
//获得大小信息,并显示
int bmWidth = bmiHeader.biWidth;
int bmHeight = bmiHeader.biHeight;
file.Close();
int x=150,y=150;
if(bmWidth < 150)
x = bmWidth;
if(bmHeight < 150)
y = bmHeight;
m_Bitmap.SetBitmap((HBITMAP)LoadImage(NULL,GetPathName(),IMAGE_BITMAP,x,y,LR_LOADFROMFILE));
//><
复制代码
//><
CFileStatus status;
CFile::GetStatus(GetPathName(),status);
CString measure,size,time;
measure.Format("图像尺寸:%d*%d",bmWidth,bmHeight);
m_Measure.SetWindowText(measure);//显示位图尺寸
size.Format("文件大小:%dK",status.m_size/1024);
m_Size.SetWindowText(size);//显示位图大小
time.Format("创建时间:%s",status.m_ctime.Format("%Y年%m月%d日 %H:%M:%S"));
m_Time.SetWindowText(time);//显示创建的位图时间
}
}
复制代码
5.最后当然是在主对话框中调用我们自己DIY的对话框,记得添加头文件
CBmpDlgdlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|
OFN_EXPLORER|OFN_ENABLETEMPLATE,"AllFiles(*.BMP)|*.BMP||");
dlg.DoModal();
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/2b071220131e77c8421a2fbf87237e78/0/0/w_19rt9zgk3h.swf-albumId=4950214609-tvId=4950214609-isPurchase=0-cnId=12[/iqiyi]
源码及视频下载
(仅在电脑可见)
(, 下载次数: 1)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4