Knowledge Base PRB: MFC ActiveX Control in IE Doesn't Detect Keystrokes This article was previously published under Q168777 PRB: TranslateAccelerator() Not Called for ActiveX Controls This article was previously published under Q183167 HOWTO: Add Toolbars and Tooltips to ActiveX Controls This article was previously published under Q194294 PRB: Enabling Menu Mnemonics in an MFC ActiveX Control This article was previously published under Q199431 PRB: MFC ActiveX Control Ignores ARROW Keys on VB Container This article was previously published under Q180402 PRB: ActiveX Control Is the Parent Window of Modeless Dialog This article was previously published under Q187988 // Trap keys and forward on to the control. BOOL CMyEditCtrl::PreTranslateMessage(MSG* pMsg) { switch (pMsg->message) { case WM_KEYDOWN: case WM_KEYUP: switch (pMsg->wParam) { case VK_UP: case VK_DOWN: case VK_LEFT: case VK_RIGHT: case VK_HOME: case VK_END: SendMessage (pMsg->message, pMsg->wParam, pMsg->lParam); // Windowless controls won't be able to call SendMessage. // Instead, just respond to the message here. return TRUE; } break; } return COleControl::PreTranslateMessage(pMsg); }
谢谢两位!1)PRB: TranslateAccelerator() Not Called for ActiveX Controls??why? 我在消息重写那儿只有TranslateAccelerator()可选,没有PreTranslateMessage! 2)我的控件是基于static的,不是edit的,它能得到键盘输入吗?和edit的有不同吗? 我用VS2003 c++的。
基于Edit, LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { // TODO : Add Code for message handler. Call DefWindowProc if necessary. switch(wParam ) { case VK_LEFT: ::MessageBox(NULL,"VK_LEFT","",MB_OK); break; case VK_RIGHT: ::MessageBox(NULL,"VK_RIGHT","",MB_OK); break; case VK_UP: ::MessageBox(NULL,"VK_UP","",MB_OK); break; case VK_DOWN: ::MessageBox(NULL,"VK_DOWN","",MB_OK); break; default: ; } return 0; }
PRB: MFC ActiveX Control in IE Doesn't Detect Keystrokes
This article was previously published under Q168777
PRB: TranslateAccelerator() Not Called for ActiveX Controls
This article was previously published under Q183167
HOWTO: Add Toolbars and Tooltips to ActiveX Controls
This article was previously published under Q194294
PRB: Enabling Menu Mnemonics in an MFC ActiveX Control
This article was previously published under Q199431
PRB: MFC ActiveX Control Ignores ARROW Keys on VB Container
This article was previously published under Q180402
PRB: ActiveX Control Is the Parent Window of Modeless Dialog
This article was previously published under Q187988
// Trap keys and forward on to the control.
BOOL CMyEditCtrl::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message)
{
case WM_KEYDOWN:
case WM_KEYUP:
switch (pMsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_HOME:
case VK_END:
SendMessage (pMsg->message, pMsg->wParam, pMsg->lParam);
// Windowless controls won't be able to call SendMessage.
// Instead, just respond to the message here.
return TRUE;
}
break;
}
return COleControl::PreTranslateMessage(pMsg);
}
我在消息重写那儿只有TranslateAccelerator()可选,没有PreTranslateMessage!
2)我的控件是基于static的,不是edit的,它能得到键盘输入吗?和edit的有不同吗?
我用VS2003 c++的。
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
switch(wParam ) {
case VK_LEFT:
::MessageBox(NULL,"VK_LEFT","",MB_OK);
break;
case VK_RIGHT:
::MessageBox(NULL,"VK_RIGHT","",MB_OK);
break;
case VK_UP:
::MessageBox(NULL,"VK_UP","",MB_OK);
break;
case VK_DOWN:
::MessageBox(NULL,"VK_DOWN","",MB_OK);
break;
default:
;
} return 0;
}
处理这两个就可以了:
TranslateAccelerator()
OnKeyDown()
谢谢两位星星!谢谢!!