而我撰寫的 Function 內容大概就是依自己 Parent 的 hwnd 加上 Windows API 取到位置及尺寸,再與自己的尺寸相減除上 2 來算出自己的 X、Y 該在哪裡,然後在 OnInitDialog 最後面去 Call 一下該 Function,不算麻煩,但就是要多做一件事,一直到前幾天我才知道這事根本不用自己做,在 afxwin.h 裡面的 CWnd 類別中有一個 Function 的定義為
void CenterWindow(CWnd* pAlternateOwner = NULL);
只要是繼承自 CWnd 的類別,都可以使用這個 Function 來讓對話框置中於母視窗,且還可以利用參數來指定對話框置中於某一個視窗,再加上要找到不是繼承至 CWnd 的 UI 類別大概很難,所以實在是相當的方便,使用範例如下
BOOL CDlgWebLogin::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowPos(NULL, 0, 0, CLIENT_WIDTH, CLIENT_HEIGHT, SWP_SHOWWINDOW|SWP_NOMOVE);
CenterWindow();
return TRUE;
}
沒有留言:
張貼留言