Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;对话框选项卡键不工作_C++_Visual Studio 2010_Winapi_Visual C++_Dialog - Fatal编程技术网

C++ C++;对话框选项卡键不工作

C++ C++;对话框选项卡键不工作,c++,visual-studio-2010,winapi,visual-c++,dialog,C++,Visual Studio 2010,Winapi,Visual C++,Dialog,我已经尝试了所有方法,但无法让TAB键在资源对话框中将焦点从一个控件移动到另一个控件。代码如下: IDD_DLG_DIALOG DIALOGEX 0, 0, 219, 198 STYLE DS_SETFONT | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_EX_CONTROLPARENT EXSTYLE WS_EX_APPWINDOW CAPTION "Caption" FONT 8, "Tw Cen MT", 400, 0, 0x0

我已经尝试了所有方法,但无法让TAB键在资源对话框中将焦点从一个控件移动到另一个控件。代码如下:

IDD_DLG_DIALOG DIALOGEX 0, 0, 219, 198
STYLE DS_SETFONT | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_EX_CONTROLPARENT
EXSTYLE WS_EX_APPWINDOW
CAPTION "Caption"
FONT 8, "Tw Cen MT", 400, 0, 0x0
BEGIN
        DEFPUSHBUTTON   "Done",IDOK,162,175,50,16
        EDITTEXT        IDC_EDIT1,27,13,185,12,ES_AUTOHSCROLL | WS_TABSTOP | WS_VISIBLE | WS_CHILD
        PUSHBUTTON      "Add",IDC_Add,109,30,33,13,WS_TABSTOP | WS_VISIBLE | WS_CHILD
        LISTBOX         IDC_LIST1,7,49,205,121,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE | WS_CHILD
        EDITTEXT        IDC_EDIT2,27,31,81,12,ES_AUTOHSCROLL | WS_TABSTOP | WS_VISIBLE | WS_CHILD
        LTEXT           "Name",IDC_STATIC,7,33,18,11
        LTEXT           "Link",IDC_STATIC,7,15,15,11    
        PUSHBUTTON      "Delete",IDC_DEL,144,30,33,13 | WS_TABSTOP | WS_VISIBLE | WS_CHILD
        CONTROL         "Autorun at startup",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,174,70,10 
        PUSHBUTTON      "Edit",IDC_EDIT,179,30,33,13,WS_TABSTOP | WS_VISIBLE | WS_CHILD
END
主While循环:

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR    lpCmdLine,int nCmdShow)
        {
            MSG msg;
            HACCEL hAccelTable;

            // Perform application initialization:
            if (!InitInstance (hInstance, nCmdShow)) return FALSE;
            hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_STEALTHDIALOG);
            while (GetMessage(&msg, NULL, 0, 0))
            {
            if((!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))||(!IsDialogMessage(msg.hwnd,&msg))) 
                        {
                            TranslateMessage(&msg);
                            DispatchMessage(&msg);
                        }
            }
    }
请在这里指出问题所在。谢谢。

根据文章确认:

TranslateAccelerator()将WM_命令消息发送到 作为参数传递给TranslateAccelerator()的句柄

您可能正在调用TranslateAccelerator()传递hwnd成员 你的味精结构;这将是已打开的窗口的句柄 焦点。您应该传递主窗口的句柄


这适用于您的代码。

将您的
|
更改为
&&
。此时,如果
TranslateAccelerator
返回
0
(除非按下加速键,否则它将返回该值),
IsDialogMessage
将永远不会被调用,这就是处理tab键的原因


(此外,正如Marco A.在他的回答中所暗示的那样,您应该传递对话框的
HWND
,而不是
msg.HWND
作为
IsDialogMessage
调用的第一个参数。但是这是无关紧要的,除非
IsDialogMessage
实际被调用,而当您有
|124;
调用时,它几乎总是不会被调用。)根据这篇文章,IsDialogMessage的hwnd参数应该是dialog hwnd,而不是msg.hwnd。第二个问题在这个博客条目中解释了:。