参考网上一些资料,本人按照自己常用的使用习惯写了个纯API实现 打开文件(GetOpenFileName)和 保存文件(GetSaveFileName)的模块,应该说主要功能使用一些正常。但是为了学习和增强模块功能和实用性,对上述2个函数都必须的参数(参数类型为结构:OPENFILENAME),我仔细阅读了其每个成员的意义并都在尝试,基本没问题。比较复杂的是其 Flags 成员,指定标志位以实现对话框的不同功能和外观。该成员有很多标志可以组合指定,对于其中个别几个,我多次尝试却还有不少疑问,因此咨询一下前辈高手们,有对这个函数或这个结构比较了解的望不吝赐教:以下是我有疑问的一些标志,先附上英文注释再跟上我自己的翻译(可能不准确),最后再写出我有疑问的地方:
====================================================
1、OFN_NOCHANGEDIR
Restores the current directory to its original value if the user changed the directory while searching for files. 
Windows NT 4.0/2000/XP: This flag is ineffective for GetOpenFileName.
----------
如果用户选择文件时更改了目录则在完毕后恢复当前目录到原始值.(在NT/2K/XP系统中,本标志对 GetOpenFileName 函数无效)
----------
按照注释,如果使用 GetOpenFileName 函数(我的是XP系统),则即使使用了该标志,在当前目录被改变时也无法恢复为原始的当前目录,可我实际测试(在函数开始前后均DEBUG.PRINT CURDIR)是可以恢复为选择文件之前的原始目录的,这是为什么呢?2、OFN_NOVALIDATE
Specifies that the common dialog boxes allow invalid characters in the returned file name. Typically, the calling application uses a hook procedure that checks the file name by using the FILEOKSTRING message. If the text box in the edit control is empty or contains nothing but spaces, the lists of files and directories are updated. If the text box in the edit control contains anything else, nFileOffset and nFileExtension are set to values generated by parsing the text. No default extension is added to the text, nor is text copied to the buffer specified by lpstrFileTitle. If the value specified by nFileOffset is less than zero, the file name is invalid. Otherwise, the file name is valid, and nFileExtension and nFileOffset can be used as if the OFN_NOVALIDATE flag had not been specified.
------------
指定对话框返回的文件名允许包含无效字符.典型地,调用程序使用回调函数通过 FILEOKSTRING 消息检查文件名.如果文件名编辑框中的文本为空或只包含空格,则会更新文件与目录列表.如果包含其他字符,将通过该字符来设置 nFileOffset 和 nFileExtension 成员的值. lpstrFileTitle 成员设置的默认扩展名不会添加到文本字符中,也不会复制该文本字符到 lpstrFileTitle 缓冲. 如果 nFileOffset 成员的值小于 0 则文件名无效,否则文件名有效并且如果未指定本标志,则 nFileExtension 和 nFileOffset 可以被使用.
------------
这个标志仅是按字面翻译,实际作用我一点没理解,望高手予以解答。3、OFN_EXTENSIONDIFFERENT
Specifies that the user typed a file name extension that differs from the extension specified by lpstrDefExt. The function does not use this flag if lpstrDefExt is NULL.
-----------
允许用户输入的文件扩展名不同于 lpstrDefExt 成员中指定的扩展名(当 lpstrDefExt 成员为空时本标志无效).
-----------
按照注释的话,意思是如果没有这个标志(而此时 lpstrDefExt 还不为空),那就是不允许用户输入不同于 lpstrDefExt 中默认的扩展名的文件喽???可实际测试,无论怎么指定,我都可以输入不同于 lpstrDefExt 中扩展名的文件并可以正常返回啊???4、OFN_NOREADONLYRETURN
Specifies that the returned file does not have the Read Only check box selected and is not in a write-protected directory.
------------
设置返回的文件不带只读属性且不位于写保护目录中.
------------
这个注释非常简单明了,本来很好理解的。可我实际测试中发现,只要带上该标志,程序会立即崩溃(无任何提示),这是为什么啊???5、OFN_NONETWORKBUTTON
Hides and disables the Network button.
------------
隐藏并禁止 网络 按钮.
------------
这个注释更简单,我想问的是:Network button 到底指的是哪个按钮啊?我怎么看不到???6、OFN_NODEREFERENCELINKS
--------------
Directs the dialog box to return the path and file name of the selected shortcut (.LNK) file. If this value is not specified, the dialog box returns the path and file name of the file referenced by the shortcut.
--------------
如果用户选择了快捷方式(.LNK)文件,设置了本标志使对话框返回快捷方式的路径和文件名,否则返回的是快捷方式目标的路径和文件名.
--------------
按照注释,使用该标志则选 .LNK 文件时返回的就是 .LNK 文件路径;没设置返回的是 .LNK 目标的实际路径。可我测试发现,无论有无此标志,返回的都是 .LNK 文件呢(返回不了其实际目标)?这是为什么???7、OFN_ENABLEINCLUDENOTIFY
Windows 2000/XP: Causes the dialog box to send CDN_INCLUDEITEM notification messages to your OFNHookProc hook procedure when the user opens a folder. The dialog box sends a notification for each item in the newly opened folder. These messages enable you to control which items the dialog box displays in the folder's item list.
-------------
2K/XP以上.  当用户打开目录时促使对话框向回调函数(OFNHookProc)发送 CDN_INCLUDEITEM 通知消息.对话框向新打开的目录中的每个项目都发送通知,这些消息允许控制对话框中的哪些项目显示在目录项目列表中.
-------------
这个标志涉及到向回调函数发送消息,可郁闷的是,无论我是否指定回调函数,只要设置了该标志,那么程序就发出 CDERR_INITIALIZATION(对话框初始化失败,发生该错误的原因通常为内存不足.) 这个错误呢???8、OFN_FORCESHOWHIDDEN
Windows 2000/XP: Forces the showing of system and hidden files, thus overriding the user setting to show or not show hidden files. However, a file that is ed both system and hidden is not shown.
--------------
2K/XP以上. 强制显示系统文件和隐藏文件,无论系统设置是否显示隐藏文件.但是,如果某文件同时带有系统属性和隐藏属性则不会显示.
--------------
按照注释,带有系统属性或者带有隐藏属性的文件(只要不是这2个属性同时都有),那么带上该标志就会显示。而我实际测试,把某文件设置为隐藏属性(无系统属性),可即使带了本标志,也显示不出来啊???========================================
基本就这么多了。本人分数有限,暂时设置每个标志问题=5分吧,8个问题共40分,外加10分为个别难于解答的标志。希望各位前辈不要嫌弃分数少,多多指点,谢谢!!!