VC编程中在打开文件对话框上实现图象预览.pdf
VC编程中在打开文件对话框上实现图象预览(图)
更新时间:2009-06-1203:01:40责任编辑:池天
热点:
前言:
本文主要是介绍在打开文件对话框,实现对图象,文本等预览(在VC++6.0下实现)。本人的水平有限,如有表达不清之处,请谅解,
请各位提出看法与建议!
正文:
1、Win98下预览对话框的实现:
2、Win2000,XP下预览对话框的实现:
3、m_ofn成及OPENFILENAME的介绍:
4、定制特性的CFileDialog对话框:
5、怎么样把预览区,放在对话框的右边:
6、多选问题的解决:
7、对预览问题的收集,如对文本,声音等:
1、Win98下预览对话框的实现:对常用格式的图片,在打开文件对话框中实现预览功能效果如下图:
图一
思路:
从CFileDialog派生CFileDialogEx类,为对话框安装钩子,利用HOOK拦截我们感爱好的CDN_SELCHANGE消息,在其中加入我们的
预览功能,原理就是这么简洁!
运用方法:
1):在ResourView中,加一个对话框,其ID为IDD_DIALOG_HOOK,留意其属性的设置:DialogProperties-styles下=style为
Child、Border为None,选中Clipsiblings。MoreStyles下=选中3D-look、Contol。
2):在对话框上加一个StaticText控件,用来显示图片。ID为IDC_PIC,其属性的设置为:TextProperties下=选中Notify、
Sunken。
3):将Picture.h,Picture.cpp;CFileDialogEx.h,CFileDialogEx.cpp添加到工程中。其中类CFileProcess是文件处理类,用于
文件进行操作。类CPicture用于处理图片。(详见代码)
4)在应用处,只要包含头文件#include”FileDialogEx.h”。
Forexample:
CStringstrPathName;
CFileDialogExdlg(TRUE);
if(dlg.DoModal()==IDOK)
{
POSITIONPos;
Pos=dlg.GetStartPosition();
while(Pos!=NULL)
{
strPathName=dlg.GetNextPathName(Pos);
if(!strPathName.IsEmpty())
{
MessageBox(strPathName,_T(GetNextPathName),MB_ICONINFORMATION);
}
}
}
注:由于时间紧,在Debug版本下,双击选中文件后,有暴停的现象(内存泄漏),而且显示效果也没有进行处理!
chive/VC/1068.htm
图二
只要在CFileDialogEXdlg(TRUE)后面,加上如下代码,就可以显示图2效果。
//只要加上下面这段代码,就可以显示2000下的打开文件对话框
//用来检测目前的操作系统的版本信息
intnStructSize=0;
DWORDdwVersion,dwWindowsMajorVersion,dwWindwosMinorVersion;
dwVersion=GetVersion();
dwWindowsMajorVersion=(DWORD)(LOBYTE(LOWORD(dwVersion)));
dwWindwosMinorVersion=(DWORD)(HIBYTE(LOWORD(dwVersion)));
if(dwVersion0
{
nStructSize=88;//2k,xp下显示新的版本
}
else
{
nStructSize=76;//98下显示老版本,如图1
}
Size