在打开文件对话框上实现图象预览 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    在打开文件对话框上实现图象预览

   

    作者:井中月_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:</p><p>    CString strPathName;</p><p>    CFileDialogEx dlg(TRUE);</p><p>    if(dlg.DoModal() == IDOK)</p><p>    {</p><p>    POSITION Pos;</p><p>    Pos = dlg.GetStartPosition();</p><p>    while (Pos != NULL)</p><p>    {</p><p>    strPathName = dlg.GetNextPathName(Pos);</p><p>    if(!strPathName.IsEmpty())</p><p>    {</p><p>    MessageBox(strPathName, _T("GetNextPathName"), MB_ICONINFORMATION);</p><p>    }</p><p>    }</p><p>    }</p><p>    
注:由于时间紧,在Debug版本下,双击选中文件后,有暴停的现象(内存泄漏),而且显示效果也没有进行处理!

    2、Win2000,XP下预览对话框的实现:比图一多了左面的快捷栏(方便用户查找),

电脑资料

在打开文件对话框上实现图象预览》(https://www.unjs.com)。其实这个实现很简单,只要判断一下系统的版本就可以了,但是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下显示老

最新文章