在打开文件对话框上实现图象预览
作者:井中月_VC
下载源代码
前言:
本文主要是介绍在打开文件对话框,实现对图象,文本等预览(在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, 注意其属性的设置:Dialog Properties->styles下=> style为Child、Border为None, 选中Clip siblings。 More Styles下 => 选中3D-look、 Contol。
2):在对话框上加一个 Static Text控件,用来显示图片。ID为IDC_PIC,其属性的设置为:Text Properties下 => 选中Notify、Sunken。
3):将Picture.h,Picture.cpp;CFileDialogEx.h,CFileDialogEx.cpp添加到工程中。其中类CFileProcess是文件处理类,用于文件进行操作。类CPicture用于处理图片。(详见代码)
4)在应用处,只要包含头文件 #include”FileDialogEx.h”。
For example:注:由于时间紧,在Debug版本下,双击选中文件后,有暴停的现象(内存泄漏),而且显示效果也没有进行处理!(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
CString strPathName;
CFileDialogEx dlg(TRUE);
if(dlg.DoModal() == IDOK)
{
POSITION Pos;
Pos = dlg.GetStartPosition();
while (Pos != NULL)
{
strPathName = dlg.GetNextPathName(Pos);
if(!strPathName.IsEmpty())
{
MessageBox(strPathName, _T("GetNextPathName"), MB_ICONINFORMATION);
}
}
}
2、Win2000,XP下预览对话框的实现:比图一多了左面的快捷栏(方便用户查找)。其实这个实现很简单,只要判断一下系统的版本就可以了,但是98下只显示图一所示的对话框,2000,XP则显示图二的对话框,这是MS在98以后的版本,对这个东东重新进行了封装!
详情请看链接: 利用MFC的CFileDialog怎么样生成Win2000的文件对话框,
http://www.chinaaspx.com/archive/VC/1068.htm
图二
只要在CFileDialogEX dlg(TRUE)后面,加上如下代码,就可以显示图2效果。
//--------只要加上下面这段代码,就可以显示2000下的打开文件对话框-------------
//------用来检测目前的操作系统的版本信息
int nStructSize = 0;
DWORD dwVersion, dwWindowsMajorVersion, dwWindwosMinorVersion;
dwVersion = GetVersion();
dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
dwWindwosMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
if(dwVersion < 0x80000000)
{
nStructSize = 88; //2k,xp下显示新的版本
}
else
{
nStructSize = 76; //98下显示老