更改/添加控件到窗口打开/保存常用对话框

时间:2008-09-29 15:16:54

标签: .net c++ openfiledialog savefiledialog

有没有办法更改/添加Windows打开/保存常用对话框以添加额外的功能?

在工作中,我们在服务器上有一个区域有数百个“作业文件夹” - 数据库应用程序自动创建/管理的普通Windows文件夹,用于存放有关作业的信息(电子邮件/扫描传真/ Word文档/电子表格/照片等)文件夹由作业编号命名。

我想使用组合框扩展标准的打开/保存对话框,该组合框根据数据库中的标签搜索作业文件夹,这样无论我的用户做什么,他们都可以轻松找到正确的作业文件夹,找到/保存他们的工作

连接数据库并提供搜索功能没有问题,但是有没有办法在对话框中添加一个组合框控件(理想情况下是一个keypress / keydown事件)?

或创建我自己的对话框并将其调用/用于代替标准对话框?即从任何应用程序,我的对话框将被调用,允许轻松访问作业文件夹。如果他们处于展望状态,他们可以快速找到一个作业文件夹,如果使用记事本,他们仍然可以轻松找到该文件夹​​。

这意味着从任何应用程序中查找作业文件夹的新统一方式。

理想情况下,有人会知道使用VB / VB.net / C#的方式,但我猜测,如果可能的话,它可能会成为C ++。

3 个答案:

答案 0 :(得分:5)

像Mark Ransom所说,你可以用OFN ENABLETEMPLATE和OFN ENABLEHOOK标志来做。然后,将对话框资源指定给OPENFILENAME结构的lpTemplateName数据成员。正确放置控件需要一些试验和错误。

你编写的钩子程序将接收特定于该对话框的窗口消息 - 你对WM_NOTIFY消息特别感兴趣 - 有一些特殊的消息(CDN INITDONE,CDN FOLDERCHANGE等)。

我已经创建了一些非常复杂的,我希望我可以包含截图。

答案 1 :(得分:2)

Windows API的相关Microsoft文档如下:
http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx

特别注意OFN_ENABLETEMPLATE和OFN_ENABLEHOOK标志。

正如您所说,当您使用C / C ++时,这些信息最为相关。

答案 2 :(得分:0)

您的程序可以设置起始文件夹,因此如果您知道作业编号(以及文件夹的名称),则可以将对话框设置为从已打开的正确文件夹开始。除此之外,如果没有为它编写完整的shell扩展,我认为你不会做太多。