【问题标题】:Reset Open File Dialog Position in Windows在 Windows 中重置打开文件对话框的位置
【发布时间】:2014-04-14 14:22:41
【问题描述】:

我使用GetOpenFileName 函数打开一个打开文件对话框。我正在制作一个处理函数,它将对话框窗口居中在所有者窗口内。我将对话集中在CDN_INITDONE 通知上。

目前,Windows 似乎会记住桌面应用程序的最后一个对话框位置并覆盖我的对话框坐标。如何重置上次记住的位置,以便我可以检查居中是否适合我的用户?

我考虑过使用不同的用户或虚拟机运行测试,但这不是很方便。不幸的是,在注册表中搜索 myexecutable.exe 不会返回任何结果。

我正在运行 Windows 8。

【问题讨论】:

  • 覆盖用户对对话框位置的偏好并不是一个好主意。在显示对话框之前调用 PostMessage() 将消息发回给自己并非不可能。当你得到它时,找到对话窗口并把它放在你想要的地方。 this answer中的示例代码。
  • 一个 CBT 钩子也可以完成它
  • @HansPassant 我尝试了类似的方法:在对话框窗口出现一秒钟后在对话框窗口上调用 SetWindowPos。似乎打开文件对话框忽略了 SetWindowPos 和 MoveWindow 方法调用。窗口句柄 (hwnd) 正确 - 使用 GetWindowText 检查其标题。

标签: windows winapi


【解决方案1】:

我迟到了大约一年,但我只需要处理这个问题。对我有用的是将OFNHookProc 提供给GetOpenFileName(),然后将传递给OFNHookProc 的HWND 的父级子类化。

子类化后,我处理WM_WINDOWPOSCHANGED,如果坐标不在我认为应该的位置,我做一个SetWindowPos(),撤消子类并返回0。

编辑:我应该说其他方法,例如钩子过程中的WM_INITDIALOGCDN_INITDONE 对我没有任何作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2013-03-15
    • 2016-03-14
    • 1970-01-01
    相关资源
    最近更新 更多