计算MDI子窗口数,仅显示文件夹的打开对话框
2006-07-19 11:29:33 来源:WEB开发网如果你只是让用户得到一个文件夹,那么 BrowseForFolder 和 GetPathName 就足够了。但 SHBrowseForFolder能做更多的事情。由于有了 GetOpenFileName,你可以提供一个回调函数来定制其行为。如果提供 BROWSEINFO::lpfn 中的 BrowseCallbackProc,Windows 只要发现你填充了这个域便会调用它。例如,Windows 在文件夹对话框自身被初始化时发送 BFFM_INITIALIZED,当用户选择某个新文件夹时发送 BFFM_SELCHANGED。你的回调过程能处理这些通知消息并做任何想做的事情。例如,你可以通过发送 BFFM_ENABLEOK 来启动或禁用 OK 按钮,或者用 BFFM_SETOKTEXT 改变按钮文本。CFolderDialog 用典型的 MFC 方式的 C++ 虚拟处理函数来替代 C 语言风格的回调,所以要写一个从 CFolderDialog 派生的回调过程并该写 OnInitialized 和 OnSelChanged 这样的虚函数。CFolderDialog 在内部使用其自己调用这些方法的回调。
为了操练更多 CFolderDialog 的高级特性,我写了一个测试程序 FolderPick。它有两个运行文件夹对话框的命令。一个显示“旧式”对话框;另一个显示新式对话框。新式样(BIF_NEWDIALOGSTYLE)创建一个更大的,可变大小的对话框,对应的按钮是“Make New Folder”——如果你指定 BIF_EDITBOX——则有一个编辑框,用户可以敲入文件夹的名字。其它标志还有 BIF_BROWSEFORCOMPUTER,用于显示计算机,BIF_BROWSEFORPRINTER 用于打印机。BIF_RETURNONLYFSDIRS 告诉 Windows 仅返回文件系统目录,而非伪文件夹,如网络邻居,BIF_STATUSTEXT 创建一个状态窗口,你可以设置其文本。(新式对话框不支持 BIF_STATUSTEXT)。完整的标志清单请参考 BROWSEINFO 文档。
更多精彩
赞助商链接