读书人

请问:GetMessage()和PeekMessage()所

发布时间: 2012-02-14 19:19:19 作者: rapoo

请教:GetMessage()和PeekMessage()所引起的不同结果
下面的代码是对一个对话框上的OK按钮被按下时的响应:

void CComputeDlg::OnBnClickedStart()
{
MSG message;
m_nTimer = (int)SetTimer(1, 100, NULL);

GetDlgItem(IDC_START)-> EnableWindow(FALSE);
volatile int nTemp;
for(m_nCount = 0; m_nCount < nMaxCount; m_nCount++)
{
for(nTemp = 0; nTemp <10000; nTemp++)
{
}
if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
}
GetDlgItem(IDC_START)-> EnableWindow(TRUE);
CDialog::OnOK();
}

这是《Visual C++ .NET技术内幕》里的一个例程的片断(Page 226)。
依照书上的代码(如上面所示),则程序可以正常运转。但是,把PeekMessage()改为GetMessage()后则可以通过编译,但只要一响应该事件,程序就死在那儿了。

请高手指点,非常感谢。


[解决办法]
GetMessage在没有消息时会一直等待
PeekMessage在没有消息时会继续向前执行代码

读书人网 >C++

热点推荐