MFC中 自定义消息
想在对话框显示出来后立即执行一段代码。
方法之一是自定义消息,即添加一个自定义的消息在消息队列中等待对话框初始化之后从消息队列中读取消息执行代码。
在OnInitDialog返回之前post一个自定义的消息,在消息的相应函数里执行代码
利用类向导添加自定义消息WM_MY_PRIVATE,则生成如下消息响应函数,可以在自定义的消息响应函数里添加自己的代码:
LRESULT MyAppDlg::OnPrivateMessage(WPARAM,LPARAM)
{
return0;
}
当然,在消息映射表里会发现增加了一项:
ON_MESSAGE(WM_MY_PRIVATE,&CdummyDlg::OnPrivateMessage)
然后在CPP文件上面添加:
#define WM_MY_PRIVATE WM_USER + 1551
在OnInitDialog()函数返回之前添加PostMessage(WM_MY_PRIVATE,如下:
BOOLMyAppDlg::OnInitDialog()
{ …………………………
// TODO: Add extra initialization here
PostMessage(WM_MY_PRIVATE);
returnTRUE; // return TRUE unless you set the focus to a control
}
方法二是利用定时器,此方法没验证过。
在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);
}