0

出于跨平台奇偶校验的原因,我GetOpenFileName()没有指定所有者,并且我自己明确禁用了所有顶级窗口。问题是重新启用。为了正确地重新启用这些窗口,我需要在对话框关闭之前重新启用它们。

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

除了取消对话框,我该怎么做?

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

我现在需要以 Windows XP 和更新版本为目标;这也意味着没有公共项目对话框。谢谢!

替代方案:如果有一种基于回调的方法GetOpenFileName()将控制权返回给我的消息循环,例如在 Mac OS X 上beginSheetModalForWindow:,我可以指定一个父窗口并避免这种黑客攻击。

4

1 回答 1

0

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

于 2014-08-25T23:02:15.623 回答