一个对话框
对话框里有一个子窗口,是我自定义的类,继承CWnd
我在这个自定义的类中相应WM_KEYDOWN和WM_CHAR消息,但发现OnKeyDown 和 OnChar并没有进入
但这个派生类的PreTransMessage中能捕捉到.
现在我只能在PreTransMessage拦截WM_KEYDOWN,再调用OnKeyDown,问题是处理完之后如果没有return TRUE,比如如果按了方向键,就会把焦点移到另外的控件上(这应该是对话框默认的行为吧),这不是我想要的
如果return TRUE,WM_CHAR就根本不会捕捉到了。
尽管有一系列方法,比如拦截WM_KEYDOWN判断键值决定是要不要return TRUE,或者直接转化后调用OnChar但我总觉得这不是好办法。
对话框里有一个子窗口,是我自定义的类,继承CWnd
我在这个自定义的类中相应WM_KEYDOWN和WM_CHAR消息,但发现OnKeyDown 和 OnChar并没有进入
但这个派生类的PreTransMessage中能捕捉到.
现在我只能在PreTransMessage拦截WM_KEYDOWN,再调用OnKeyDown,问题是处理完之后如果没有return TRUE,比如如果按了方向键,就会把焦点移到另外的控件上(这应该是对话框默认的行为吧),这不是我想要的
如果return TRUE,WM_CHAR就根本不会捕捉到了。
尽管有一系列方法,比如拦截WM_KEYDOWN判断键值决定是要不要return TRUE,或者直接转化后调用OnChar但我总觉得这不是好办法。
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
2、映射WM_GETDLGCODE消息BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
ON_WM_GETDLGCODE()
ON_WM_KEYDOWN()
END_MESSAGE_MAP() UINT CMyEdit::OnGetDlgCode()
{ return DLGC_WANTARROWS|DLGC_WANTALLKEYS|DLGC_WANTCHARS;
}
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
//Check if the key pressed was a DOWN ARROW key
if (nChar == VK_DOWN)
AfxMessageBox("It is a down arrow key!");
if (nChar == VK_RIGHT)
AfxMessageBox("It is a right arrow key!");
if (nChar == VK_LEFT)
AfxMessageBox("It is a left arrow key!");
if (nChar == VK_UP)
AfxMessageBox("It is a up arrow key!");
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
谢谢