- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?
标准文件对话框的扩展使用方法
?
?
?
?
1 引言
在windows的程序设计中、为了界面的一致性、微软提供了一组标准的标准对话框,以此方便用户的操作使用,同时也减轻了程序设计人员的工作,使其不必浪费时间去做重复性的工作。但是,在实际的使用中,系统提供的标准对话框并不能满足用户的需要,于是,微软为此提供了让程序设计人员可以在标准对话框的基础上增加新的控件的功能。但这一功能是在SDK层上提供的,而如今大多数开发人员都不用SDK进行开发,而用MFC。我们知道,MFC中有几个类封装了标准对话框。但是在其参考文档中并未指出如何利用这些类实现标准对话框的扩展。经过研究MFC的源代码发现其中封装的几个类是支持标准对话框的扩展的。而且使用起来特别方便简单。本文主要就标准文件对话框(保存和打开)的扩展作以分析。
2 在SDK中的标准文件对话框的实现
在SDK中,由于系统为每一个标准对话框都提供了一个相应的对话框模版资源,所以在使用时我们不需要设计对话框模版资源而直接调用相应的API函数即可。相应于每一种标准对话框,都提供了一个结构,程序员通过此结构来向系统传递初始信息,同时又用此结构来获得用户在标准对话框上所执行的操作。在实际的使用中,为了使用API函数来显示标准对话框,一般都是先要初始化相应的结构的各个字段,并将该结构的指针传递给通用对话库的某个函数,该函数创建并显示对话框。当用户关闭对话框时,被调用的函数将控制返回给程序,程序员可以从传递给它的结构中获取用户在标准对话框上的操作信息。对于标准文件对话框来说,需要使用的结构为OPENFILENAME,其相应的API函数为
BOOL GetOpenFileName( LPOPENFILENAME lpofn )? //针对于“打开”文件对话框
BOOL GetSaveFileName( LPOPENFILENAME lpofn)? //针对于“保存”文件对话框
对于标准对话框的扩展正是通过对OPENFILENAME结构的三个成员的设置来实现的,分别为LPOFNHOOKPROC? lpfnHook、 LPCTSTR? lpTemplateName、DWORD? Flags。因此,为了实现对标准对话框的扩展,必须为上面三个成员变量赋以正确的值。三个成员变量的意义如下(其他它成员变量的说明可参见SDK文档):
(1)lpfnHook:指向一个钩子过程的指针。该变量只有当成员变量Flags包含OFN_ENABLEHOOK 标志时才起作用。如果成员变量Flags不包含OFN_EXPLORER标志,则该变量为一个指向OFNHookProcOldStyle钩子过程类型的指针,对话框中所有的消息都发送到该过程,在该过程中,对于所有的标准对话框中的控件的消息,该过程返回false,以便将其发送到标准对话框的默认的处理过程,而对于自己添加的控件的消息则自行处理后返回true。而如果成员变量Flags包含标志OFN_EXPLORER,则该变量为一个指向OFNHookProc钩子过程类型的指针。该过程仅接收程序员增加的控件的消息及其对话框的消息。
(2)lpTemplateName:一个指向以NULL结束的字符串的指针,该字符串标识了一个对话框模版资源,如果对话框模版资源表示为数值型,可以通过宏MAKEINTRESOURCE转化为字符串。该变量仅在成员变量Flags包含标志OFN_ENABLETEMPLATE时有效。如果标志OFN_EXPLORER被设置,则该系统将利用所指定的模版来创建一个对话框,作为默认的标准的Explorer风格的对话框的子窗口。如果OFN_EXPLORER没有被设置,则系统利用指定的模版创建一个old-style的对话框来代替默认的标准对话框。
(3)Flags:可以用来初始化对话框的一系列位标志。为了实现标准对话框的扩展,该成员变量必须包含OFN_ENABLETEMPLATE和OFN_ENABLEHOOK标志。这两个标志分别对应着上面两个成员变量的有效性。
目前,在32位的windows程序中我们主要使用Explorer风格的对话框,因此在此还应该使成员变量Flags包含OFN_EXPLORER标志。使用OFNHookProc类型的钩子过程来处理系统发送来的消息,该过程的原形如下:
?? UINT_PTR CALLBACK OFNHookProc(
???? HWND hdlg,????? // handle to child dialog box
???? UINT uiMsg,???? // message identifier
???? WPARAM wParam,? // message parameter
???? LPARAM lParam?? // message pa
文档评论(0)