欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    VC编程中在打开文件对话框上实现图象预览.doc

    • 资源ID:70333727       资源大小:174KB        全文页数:27页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VC编程中在打开文件对话框上实现图象预览.doc

    VC编程中在打开文件对话框上实现图象预览(图)安全中国 更新时间:2009-06-12 03: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, 注意其属性的设置: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: 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); 注:由于时间紧,在Debug版本下,双击选中文件后,有暴停的现象(内存泄漏),而且显示效果也没有进行处理! 2、Win2000,XP下预览对话框的实现:比图一多了左面的快捷栏(方便用户查找)。其实这个实现很简单,只要判断一下系统的版本就可以了,但是98下只显示图一所示的对话框,2000,XP则显示图二的对话框,这是MS在98以后的版本,对这个东东重新进行了封装!详情请看链接: 利用MFC的CFileDialog怎么样生成Win2000的文件对话框,                            图二只要在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下显示老版本,如图1 dlg.m_ofn.lStructSize = nStructSize; /-用来检测目前的操作系统的版本信息3、m_ofn成员及OPENFILENAME的介绍:OPENFILENAME结构体:虽然成员变量不少,但是我们常用的就几个而已!该结构体包含一些保存或打开文件对话框的重要信息,比如过滤文件名,指定初始化路径,对文件进行多选,显示98风格还是2000风格的open/save对话框!typedef struct tagOFN / ofn DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCTSTR lpstrFilter; LPTSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPTSTR lpstrFile; DWORD nMaxFile; LPTSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCTSTR lpstrInitialDir; LPCTSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; LPCTSTR lpstrDefExt; DWORD lCustData; LPOFNHOOKPROC lpfnHook; LPCTSTR lpTemplateName; OPENFILENAME; MemberslStructSize :指定OPENFILENAME结构体的大小(字节)。这个决定你的对话框显示98风格,还是2k风格。hwndOwner :指定拥有该对话框的窗口的标识,可以是任何有效窗口的句柄,也可以为空。hInstance :当在Flags中已经设置OFN_ENABLETEMPLATEHANMDLE标志,那么hInstance是一个包含对话框模板的内存对象的句柄,假设OFN_ENABLETEMPLATE标志已经设置,那么hInstance标识一个由lpTemplateName命名的对话框模板。lpstrFilter:指向一个以一对“0”结尾的过滤字符串的缓冲区。在缓冲区中的最后一个字符串必定是以两个NULL字符结束。(一般第一个字符串描述要过滤的格式,如“Text Files”,第二个字符串一般过滤格式进行指定,如“*.TXT”)。如: _T(".JPG .JPEG0*.jpg;*.jpeg0.STL0*.stl0所有文件 0 *.*0 ");lpstrFile :指向一个包含文件名的缓冲区,用来初始化文件名编辑框。初始化不是必须的,也可以为空。Notice:如果OFN_ALLOWNULTISELECT标志已设定,用户对文件进行多选,那么该缓冲区包含所有被选择的文件名,如果缓冲区太小,这个函数返回FALSE。nMaxFile:这个缓冲区的大小由lpstrFile指定。lpstrFileTitle:指向一个接收已选择文件文件名和扩展名(不包括路径信息)的缓冲区,也可以为空。lpstrInitialDir :指向一个指定初始化路径的字符串,也就是最初弹出时所显示的目录。如果为NULL,则当前目录为初始目录。lpstrTitle :用来设置对话框的标题,如果为空,系统会用默认的标题(“打开” 或 “保存”)。Flags :可以设置一些标志或标志的组合来初始化对话框的显示外观。Flag MeaningOFN_ALLOWMULTISELECT:这个标志是允许选择多个文件,如果你想选择N个文件,那么这个标志一定要设置。OFN_ENABLEHOOK:允许lpfnHook为对话框指定一个HOOK函数,用来处理对话框的消息。也就可以拦截我们感兴趣的消息。如:CDN_SELCHANGEOFN_ENABLESIZING: 这个标志设定后,在对话框右下角会出现一个东东,允许用户随意扩大和缩小对话框OFN_ENABLETEMPLATE:这个很重要,如果你想加入一个对话框模板做为预览区, 这个标志一定要设置。OFN_EXPLORER:这个标志是最重要的,如果你想定制对话框模板,利用HOOK函数,对文件进行多选,这个标志必须设定。OFN_HIDEREADONLY:隐藏只读属性复选框。OFN_READONLY:设定这标志,会在对话框的下方出现一个“Read Only”的复选框。OFN_SHOWHELP:设置该标志,在对话框上会显示 “帮助”按钮。 lpstrDefExt :指向一个包含默认扩展名的缓冲区。lpfnHook:指向一个HOOK的处理过程函数。在该函数里实现拦截我们想要的消息。 lpTemplateName :指向一个以对话框模板资源命名的字符串(以NULL结尾),该对话框模板在模块中由hInstance成员标识。注意:如果想指定一个对话框模板资源必须在Flags中设定OFN_ENABLETEMPLATE。如: m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DIALOG_HOOK)。 4、定制个性的CFileDialog对话框:这个对Win98下的对话框用处比较大(个人观点),我在这里不详细的说明只是给大家一个链接:5. 怎么样把预览区,放在对话框的右边: 有时候,我们想把预览区放在右边,而且还想在最下面添加一些控件(如下图三),该怎么办呢?当时,我找了半天资料也没找到,后来我们老大告诉我应该这样.                      图三其实很简单,只要加一个StaticText控件就可以了,注意其ID设置,我设为stc32。但是其摆放位置很重要。如果你想要实现图三的效果,必须如图四这样放置:                       图四如果你想实现这样的放置效果,并且复选框一定要在预览区的下面,如图五:                       图五则Static text要如图六这样放置:                       图六关于预览区的放置,MSDN上有说明,但是我找不到(找了一个下午)!6、多选问题的解决:1).使用CFileDialog类选择多个文件时,发现选择的文件个数有限,这是因为m_ofn.nMaxFile的值有限:256Btye,解决的办法是:将m_ofn.lpstrFile的缓冲区换成自己的指针。选择多个文件,首先要给m_ofn的标志nFlags加上OFN_ALLOWMULTISELECT。当用户选择多个文件,CFileDialog会把选择后的文件名拷贝到一个缓冲区,默认这个缓冲区有256个字符,这对于要求多选的用户来说是不够的。你可以将m_ofn.lpstrFile替换成自己的缓冲区指针: char sBuffer2000; memset(sBuffer, 0, 2000); CSTLFileDialog dlg(TRUE);dlg.m_ofn.lpstrFile = sBuffer; dlg.m_ofn.nMaxFile = 2000; /解决多选问题这个方法解决多选问题,就是简便易懂。如果你多选的真好是257或300个字符,那么其余的1400个空间易浪费了。下面介绍一个动态解决分配的方法,请看代码:/-1.动态分配内存空间,解决多选的问题-void CSTLFileDialog:SolveMoreSelect() TCHAR chBuffer; TCHAR *chFiles = NULL; TCHAR *chFolder = NULL; UINT nFileSize; UINT nFolderSize; nFileSize = CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, &chBuffer, 1); nFolderSize = CommDlg_OpenSave_GetFolderPath(GetParent()->m_hWnd, &chBuffer, 1); if(nFileSize + nFolderSize) > m_ofn.nMaxFile) if(chFiles) delete chFiles; chFiles = new TCHARnFileSize + 1; CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, chFiles, nFileSize); if(chFolder) delete chFolder; chFolder = new TCHARnFolderSize + 1; CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, chFolder, nFolderSize); else if(chFiles) delete chFiles; chFiles = NULL; if(chFolder) delete chFolder; chFolder = NULL; 7、对预览问题的收集,如对文本,声音等:如果您看我的代码比较困难,请到以下链接处:1)、对文本文件实现预览:2)、对图象文件(2D)实现预览:3)、对位图文件实现预览:4)、对声音文件实现预听:结束语:在这里我要感谢帮助过我的朋友们,希望您对我写的文章提出宝贵的意见!另外如果有时间我的另一篇文章将介绍在CFileDialog的打开文件对话框中,实现对3D图形的预览,也就是对STL(CAD中常用的存储格式)格式的文件进行预览,这才是我的要做的!如果表述不清之处,请Email联系!

    注意事项

    本文(VC编程中在打开文件对话框上实现图象预览.doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开