在Windows的"打开/保存常用"对话框中更改/添加控件
有没有一种方法可以更改/添加到Windows"打开/保存"公共对话框中以添加其他功能?
在工作中,我们在服务器上有一个区域,其中有数百个"作业文件夹",只是数据库应用程序自动创建/管理的普通Windows文件夹,用于存放有关作业的信息(电子邮件/扫描的传真/ Word文档/电子表格/照片等)。由工作编号命名。
我想用一个组合框来扩展标准的打开/保存对话框,该组合框根据数据库中的标签搜索作业文件夹,以便我的用户无论在做什么,都可以轻松地找到正确的作业文件夹以查找/保存他们的工作的方式。
连接到数据库并提供搜索功能没问题,但是有没有办法向对话框添加组合框控件(理想情况下带有keypress / keydown事件)?
还是创建我自己的对话框并调用/使用它来代替标准对话框?即从任何应用程序我的对话框将被称为允许轻松访问作业文件夹。如果他们在Outlook中,他们可以快速找到作业文件夹,如果使用记事本,他们仍然可以轻松找到该文件夹。
这意味着可以从任何应用程序中找到工作文件夹的新的统一方式。
理想情况下,有人会知道使用VB / VB.net / C的方法,但我猜测,如果可能的话,可能是C ++。
解决方案
程序可以设置起始文件夹,因此,如果我们知道作业编号(以及文件夹的名称),则可以将对话框设置为从已打开的正确文件夹开始。除此之外,我认为如果不编写完整的shell扩展就无法做很多事情。
Windows API的相关Microsoft文档在这里:
http://msdn.microsoft.com/zh-CN/library/ms646960(VS.85).aspx
http://msdn.microsoft.com/zh-CN/library/ms646839(VS.85).aspx
特别要看一下OFN_ENABLETEMPLATE和OFN_ENABLEHOOK标志。
就像我们说的那样,当我们使用C / C ++时,这些信息最相关。
就像Mark Ransom所说的,我们可以使用OFNENABLETEMPLATE和OFNENABLEHOOK标志来实现。然后,我们为OPENFILENAME结构的lpTemplateName数据成员指定一个对话框资源。正确放置控件的位置需要反复试验。
我们编写的钩子过程将接收特定于该对话框的窗口消息,我们对该对话框特别感兴趣,WM_NOTIFY消息中有一堆特殊的消息(CDNINITDONE,CDNFOLDERCHANGE等)。
我几次创建了一些精美的代码,但愿我可以包括一个屏幕截图。