OFN_ENABLEHOOK修改GetOpenFileName()的外观

Meh*_*dad 2 winapi getopenfilename ofnhookproc

为什么在GetOpenFileName()中添加一个钩子过程(使用OFN_ENABLEHOOKOFN_EXPLORER标志)会导致在Windows 7中显示不同的对话框,如果钩子过程只返回FALSE而没有做任何事情?


更新:

显然用钩子看Vista/Windows 7看起来是不可能的......有人可以确认或反驳这个吗?

Dav*_*nan 5

原因是MS完全重新组织了Vista的文件对话框.挂钩用于通过提供资源文件来扩展文件对话框.这给定制器带来了太多的动力.他们可以很容易地修改对话框的标准元素,事实上很多应用都这样做了.对话框的重组会破坏许多使用钩子的应用程序.那些人会试图操纵对话框中不存在或者以不同方式实现的元素.对话框的旧版本仍然适用于此类应用程序"获取它们的钩子".

你是正确的,当你使用钩子时,不可能获得新的外观.相反,您需要使用IFileDialogCustomize接口来自定义对话框.这样功能较弱,但会导致外观和行为与对话框的标准部分更加一致.