你目前正处于脱机状态,正在等待 Internet 重新连接

PRB ︰ 在 DLL 中的无模式对话框中不会处理 TAB 键

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 233263
症状
当无模式对话框从一个动态链接库 (DLL) 中启动时,则 TAB 键和箭头键不会像预期的那样控件间移动焦点
原因
对于无模式对话框中处理 TAB 键,消息泵必须调用 IsDialogMessage API。但是,如果您正在编写一个 DLL 并不能访问到的.exe 的源代码,不能修改消息泵来执行此操作。
解决方案
要变通解决此问题,可以使用 WH_GETMESSAGE 钩捕获键击消息并调用 IsDialogMessage API。如果 IsDialogMessage 返回 TRUE,然后不要传递到消息泵的消息。当处理 WM_INITDIALOG 设置挂钩和撤消它当处理 WM_DESTROY 消息时。
状态
此行为是设计使然。
更多信息
下面的代码阐释了如何设置和取消设置挂钩以及如何使用 IsDialogMessage() 到进程选项卡上的关键讯息 ︰
BOOL CALLBACK DllDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ){   switch ( uMsg )   {     case WM_INITDIALOG:         hHook = SetWindowsHookEx( WH_GETMESSAGE, GetMsgProc,                                   NULL, GetCurrentThreadId() );         return TRUE;     case WM_COMMAND:         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)          {            DestroyWindow( hwndDlg );            hwndDllDlg = NULL;         }         return TRUE;     case WM_DESTROY:         UnhookWindowsHookEx( hHook );         return FALSE;   }   return FALSE;}				
挂钩过程,GetMsgProc,应如下所示 ︰
LRESULT FAR PASCAL GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam){   LPMSG lpMsg = (LPMSG) lParam;   if ( nCode >= 0 && PM_REMOVE == wParam )   {      // Don't translate non-input events.      if ( (lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST) )      {         if ( IsDialogMessage(hwndDllDlg, lpMsg) )         {            // The value returned from this hookproc is ignored,             // and it cannot be used to tell Windows the message has been handled.            // To avoid further processing, convert the message to WM_NULL             // before returning.            lpMsg->message = WM_NULL;            lpMsg->lParam  = 0;            lpMsg->wParam  = 0;         }      }   }   return CallNextHookEx(hHook, nCode, wParam, lParam);}				
usrwndw usrdlg usrhooks usrhkgm usrtab

警告:本文已自动翻译

属性

文章 ID:233263 - 上次审阅时间:05/07/2016 23:31:00 - 修订版本: 4.0

  • kbdlg kbhook kbprb kbmt KB233263 KbMtzh
反馈
ps://c.microsoft.com/ms.js">