热情软件屋

 

OCX控件无法截获方向键


编号:QA000068
建立日期: 1998年11月3日 最后修改日期:1998年11月3日
所属类别:

wang weiran:
    我在VC5下编写了一个OCX控件,其中WM_KEYDOWN消息和WM_CHAR消息由我先过滤处理。编成之后,在VC、POWERBUILDER中均正常,唯独将控件插入VB5中出现异常:表现为对键盘的四个箭头键及TAB键的KEYDOWN消息均无法截获,而其余键却表现正常,可以收到并处理,请问这是为何?

回答:

    截获方向键应该重载PreTranslateMessage函数,如果不重载这个函数,VB会将这几个键的操作解释为移动输入焦点(focus)。通常的程序如下:
    BOOL CSampleControl::PreTranslateMessage(LPMSG lpmsg)
    {
     BOOL bHandleNow = FALSE;
    
     switch (lpmsg->message)
     {
     case WM_KEYDOWN:
     switch (lpmsg->wParam)
     {
     case VK_UP:
     case VK_DOWN:
     case VK_LEFT:
     case VK_RIGHT:
     bHandleNow = TRUE;
     break;
     }
     if (bHandleNow)
     OnKeyDown(lpmsg->wParam, LOWORD(lpmsg
     ->lParam), HIWORD(lpmsg->lParam));
     break;
     }
     return bHandleNow;
    }
    不过这样做有时仍无法截获方向键,这是因为Container没有调用PreTranslateMessage函数,对于这种情况可以参考微软的Knowledge Base的文章:“Q168777 RB: MFC ActiveX Control in IE Doesn't Detect Keystrokes”

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio