對話方塊是不會響應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處理事件。
對話方塊是不會響應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處理事件。