2014-04-14 49 views
2

我使用GetOpenFileName函數打開了一個打開的文件對話框。我正在做一個處理函數,它將把對話窗口置於所有者窗口中。我在CDN_INITDONE通知中居中對話框。在Windows中重置打開文件對話框位置

目前,Windows似乎記得桌面應用程序的最後一個對話框位置並覆蓋了我的對話框座標。如何重置最後記住的位置,以便我可以檢查居中將適用於我的用戶?

我想過使用不同的用戶或虛擬機來運行測試,但這不是很方便。不幸的是,在註冊表中搜索myexecutable.exe不會返回任何內容。

我運行Windows 8的

+3

覆蓋用戶對對話所在位置的偏好並不是一個好主意。這不是不可能的,請在顯示對話框將消息發回給自己之前調用PostMessage()。當你得到它時,找到對話窗口並將它放在你想要的地方。示例代碼中的[這個答案](http://stackoverflow.com/a/2576220/17034)。 –

+1

一個CBT鉤子將完成它太 –

+0

@HansPassant我嘗試過類似的方法:在對話窗口中調用SetWindowPos後的外觀之後第二。看起來,打開的文件對話框忽略了SetWindowPos和MoveWindow方法調用。窗口句柄(hwnd)是正確的 - 用GetWindowText檢查它們的標題。 –

回答

2

我大概晚了一年,但我不得不處理這個問題。對我來說有效的是提供OFNHookProcGetOpenFileName(),然後將HWND的父代繼承到OFNHookProc

子類後,我處理WM_WINDOWPOSCHANGED,如果在那裏我想他們應該是座標不一樣,我做了SetWindowPos(),撤消子類,並返回0

編輯:我應該說其他的方法,例如鉤子過程中的WM_INITDIALOGCDN_INITDONE對我來說都不起作用。