当用户在GetOpenFileName()中选择取消时,是否有类似于CDN_FILEOK的CDN_FILECANCEL?

时间:2014-08-25 21:51:28

标签: c winapi modal-dialog comdlg32

出于跨平台奇偶校验的原因,我的GetOpenFileName()指定没有所有者,我自己明确禁用所有顶级窗口。问题是重新启用。 In order to re-enable these windows correctly,我需要在对话框关闭之前重新启用它们。

在用户选择文件的情况下,这没有问题:我只是在钩子程序中检查CDN_FILEOK。没有问题,没有混乱的焦点。

我该如何做,但取消对话框?

我在钩子程序中尝试了WM_DESTROY,但是在对话框被隐藏(太晚)后运行。我试过了WM_COMMAND,但这似乎并不能涵盖所有情况。我不确定我还有其他选择。

我现在需要针对Windows XP及更新版本;这也意味着没有Common Item Dialogs。谢谢!

备用:如果有办法执行基于回调的GetOpenFileName(),它将控件返回到我的消息循环,就像在Mac OS X上使用{ {1}},我可以指定父窗口并避免这种黑客攻击。

1 个答案:

答案 0 :(得分:0)

取消对话框时没有CDN通知。如果用户按下“取消”按钮,您可以尝试拦截它发送到对话框的BN_CLICKED通知,甚至可以将按钮本身子类化。但是如果用户通过其他方式取消对话(单击红色X,按ESC等),则可能需要捕获WM_CLOSE消息。