VC++對話框程序不響應OnChar 和 OnKeyDown事件處理函數

vc++生成的對話框程序默認是不會響應OnChar和OnKeyDown消息的,會被其它控件攔截
如果不修改代碼,使用時會發現不會進入這兩個事件響應函數,必須修改重寫PreTranslateMessage()虛函數才能正確地
響應這兩個消息函數,具體實現如下:
  
   BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
    {
  
   SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
  
   return 0;
  
   //return CDialog::PreTranslateMessage(pMsg);
    }
 這樣,程序就能正確地調用onKeyDown和onChar這兩個函數了,且onKeyDown()在onCchar()之前處理的。

這樣就能在對話框中響應WM_CHAR、WM_KEYDOWM消息了,注意在發送WM_CHAR時,實際發送了三個消息
  
即 WM_CHAR
  
   WM_KEYDOWM
  
   WM_KEYUP
  
所以,如果你有如下代碼:
  
void CMy1Dlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
  {
  // TODO: Add your message handler code here and/or call default
  if(nChar=='a')
   MessageBox("a");
  CDialog::OnChar(nChar, nRepCnt, nFlags);
 }
  
會彈出兩個消息對話框 ,所以最好單獨在WM_KEYDOWM或WM_KEYUP處理事件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章