描述:
Active X 如何接受到如下方向按键的消息
VK_LEFT
VK_RIGHT
VK_TOP
VK_BOTTOM
在VC中,一般的窗口继承类可以用虚函数PreTranslateMessage处理,
但在Active X 中却不会调用该虚函数,我不明白为什么
解决方案1:
如果你是用ATL的话,可以重载IOleControl::GetControlInfo()和IOleInPlaceActiveObject::TranslateAccelerator();
解决方案2: BOOL CShow3dctlCtrl::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam>=37&&pMsg->wParam<=40)
{
FireKKeyDown((long)pMsg->wParam, (long)LOWORD(pMsg->lParam), (long)HIWORD(pMsg->lParam));
if(m_bDraw)
{
Env.MoveEye(pMsg->wParam);
SoundObj.ListenerPos = Env.RoamGesture.EyePoint3D;
/// FireReDraw();
}
}
}
return COleControl::PreTranslateMessage(pMsg);
}
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