最近在做一個項目,在創建一個子對話框的時候,由於在OnInitDialog()初始化所要執行的代碼量比較大,導致初始化很慢,要2秒左右對話框才能顯示出來...所以想把部分代碼在對話框顯示出來之後再執行,在網上找了很多資料,總結了下面兩種辦法,一種是在OnInitDilalog()中設定一個定時器,還有一種是再OnInitDialog()中PostMessage()在添加一個自定義的消息在消息隊列中等待對話框初始化之後從消息隊列中讀取消息執行代碼。、、、、
1.在OnInitDialog返回之前創建一個只報時一次的定時器,在OnTimer裡執行代碼
BOOLMyAppDlg::OnInitDialog()
{
…………………………
// TODO: Add extra initialization here
SetTimer(m_nTimerID, 100, NULL);
returnTRUE; // return TRUE unless you set the focus to a control
}
voidMyAppDlg::OnTimer(UINT_PTRnIDEvent)
{
if(nIDEvent == m_nTimerID)
{
// 只執行一次,所以一報時就Kill掉了
KillTimer(m_nTimerID);
m_nTimerID = 0;
AfxMessageBox(_T("Hello MFC"));
return;
}
CDialog::OnTimer(nIDEvent);
}
2.在OnInitDialog返回之前post一個自定義的消息,在消息的相應函數裡執行代碼
#define WM_MY_PRIVATE WM_USER + 1551
BOOLMyAppDlg::OnInitDialog()
{
…………………………
// TODO: Add extra initialization here
PostMessage(WM_MY_PRIVATE);
returnTRUE; // return TRUE unless you set the focus to a control
}
// 當然,消息映射表裡得加上一項
// ON_MESSAGE(WM_MY_PRIVATE, &CdummyDlg::OnPrivateMessage)
LRESULTMyAppDlg::OnPrivateMessage(WPARAM,LPARAM)
{
AfxMessageBox(_T("Hello MFC"));
return0;
}