2014-03-28 20 views
0

我調用AfxMessageBox()函數期望彈出窗口居中於調用它的MFC對話框。但是,該框會集中到桌面而不是對話框。它的位置不取決於父對話框的實際位置。什麼會導致這種行爲?是否有可能將AfxMessageBox移動到所需的位置?謝謝!AfxMessageBox顯示在桌面的中間

+0

'CWinApp'讓您有機會通過虛擬函數DoMessageBox調整AfxMessageBox的行爲。因此,如果你確定誰有重點,你可以確定相關的頂層窗口,並在調用'MessageBox'時使用它; – user1793036

回答

0

你可以使用

int WINAPI MessageBox(
    _In_opt_ HWND hWnd, 
    _In_opt_ LPCTSTR lpText, 
    _In_opt_ LPCTSTR lpCaption, 
    _In_  UINT uType 
); 

,並通過應用程序窗口的第一個參數(HWND)的手柄。然後它應該居中。

我不再使用MFC,但我認爲主應用程序窗口必須設置在某處(InitInstance?),也許如果沒有這樣做,AfxMessageBox不會使用應用程序窗口。

0

對話框可以居中在其父窗口上。 AfxMessageBox被創建爲「系統範圍」對話框,這意味着不是應用程序窗口的「子」對話框,這就是爲什麼它不在父窗口的中心,而是在桌面上。

創建AfxMessageBox後,您不能移動它,因爲它是一個模式對話框(以及爲了移動對話框而創建線程的麻煩可能不值得)。

更好的解決方案只是創建自己的對話框功能(如上面alain所建議的)。然後,當你調用它時,你可以傳遞你的調用窗口類(hWnd)的窗口句柄,並且創建的對話框將會在你的應用程序窗口中居中,如你所願。