15,979
社区成员
发帖
与我相关
我的任务
分享
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_ESCAPE)
return TRUE;
if (pMsg->wParam == VK_RETURN)
return TRUE;
}
else if(pMsg->message==ID_RefreshWin)
{
CArray<RefreshWin * > arr;
this->EnterCriticalSection_refreshs();
for(int i=0,count=this->m_refreshs.GetSize();i<count;i++)
arr.Add(this->m_refreshs[i]);
this->m_refreshs.RemoveAll();
this->LeaveCriticalSection_refreshs();
for(int i=0,count=arr.GetSize();i<count;i++)
{
arr[i]->Refresh(*this);
delete arr[i];
}
}
return CDialog::PreTranslateMessage(pMsg);
}
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_ESCAPE)
return TRUE;
if (pMsg->wParam == VK_RETURN)
return TRUE;
}
这一段是防止按esc 和 回车 退出的。屏蔽掉之后,还是没有响应ID_RefreshWin消息。void CXXXDlg::PushRefreshWin(RefreshWin *r)
{
this->EnterCriticalSection_refreshs();
this->m_refreshs.Add(r);
this->LeaveCriticalSection_refreshs();
BOOL res=this->PostMessageA(ID_RefreshWin);
}
都是调用此函数,调试时PostMessageA函数都返回1