找到答案在這裏:Waiting until the dialog box is displayed before doing something
Short story:
INT_PTR CALLBACK
DlgProc(HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
switch (uiMsg) {
case WM_INITDIALOG:
return TRUE;
case WM_WINDOWPOSCHANGED:
if ((((WINDOWPOS*)lParam)->flags & SWP_SHOWWINDOW) &&
!g_fShown) {
g_fShown = TRUE;
PostMessage(hwnd, WM_APP, 0, 0);
}
break;
case WM_APP:
MessageBox(hwnd,
IsWindowVisible(hwnd) ? TEXT("Visible")
: TEXT("Not Visible"),
TEXT("Title"), MB_OK);
break;
case WM_CLOSE:
EndDialog(hwnd, 0);
break;
}
return FALSE;
}
如果你使用MFC像我你需要映射WM_WINDOWPOSCHANGED,然後使用ON_MESSAGE映射WM_APP。有關更多詳細信息,請參閱this CodeProject article。
在某些情況下,計時器可能不會觸發。文章我指的是(http://blogs.msdn.com/oldnewthing/archive/2006/09/25/770536.aspx)涵蓋。 – Sumrak 2008-11-07 19:43:55