void CtestkeyDlg::OnBnClickedButton1()
{
::SendMessage(this->m_hWnd ,WM_CHAR,'1',0);//这个不能响应
         ::PostMessage(this->m_hWnd ,WM_CHAR,'1',0);//这个可以。
}BOOL CtestkeyDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_CHAR){
AfxMessageBox("ok");
}
return CDialog::PreTranslateMessage(pMsg);
}不知道为什么。。顺便帮我扫扫盲。。说具体点。两者有什么区别。。谢谢啊。~

解决方案 »

  1.   

    PostMessage一般是用户调用的,SendMessage一般是由系统调用(一般情况是这样,也有例外,有些消息必须用SendMessage发送,例如WM_COPYDATA)。
    PostMessage只管发送,SendMessage不但发送,还负责接收消息的返回值。
      

  2.   

    另外SendMessage是阻塞调用,作用相当于直接函数调用.
    PreTranslateMessage收不到SendMessage的消息.
      

  3.   

    PostMessage的消息是放在程序消息队列中等待处理的,而SendMessage则直接调用消息处理函数处理消息。
      

  4.   

    就是你调用SendMessage后必须等待消息处理函数处理完并返回,与直接调用消息处理函数的效果是一样的。
      

  5.   

    SendMessage是发送一条消息
    而PostMessage是放置一条消息到消息队列中