win 32如何设置UI控件的tab顺序?

kid*_*ddo 2 c winapi dialog

大家好,我有一个动态创建的小对话框,它有一个文本框和一个按钮..如果用户按下 TAB 键,它必须在两个控件(文本框和按钮)之间切换......我尝试使用 SetwindowPos.. .但它似乎没有解决我的问题......请给我一个解决方案......在下面的代码中......我也尝试在taborder中包含主窗口......仍然不起作用

//创建对话框

HWND dialogHandle = CreateWindowEx(0,WC_DIALOG,L"Security Alert",WS_OVERLAPPEDWINDOW|WS_VISIBLE,600,300,280,160,NULL,NULL,NULL,NULL);

//create textboxcontrol within the dialog
    HWND textBoxHandle = CreateWindowEx(WS_EX_CLIENTEDGE,L"EDIT",L"",WS_CHILD|WS_VISIBLE |ES_PASSWORD | WS_TABSTOP,123,48,110,25,dialogHandle,(HMENU)IDD_TEXTBOX,NULL,NULL);

    //create button
    HWND buttonHandle  = CreateWindowEx(NULL,L"Button",L"OK",WS_CHILD|WS_VISIBLE| WS_TABSTOP,151,85,85,25,dialogHandle,(HMENU)ID_PASSWORD_OK,NULL,NULL);
Run Code Online (Sandbox Code Playgroud)

//设置窗口位置

SetWindowPos(NULL,textBoxHandle,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetWindowPos(textBoxHandle,buttonHandle,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
Run Code Online (Sandbox Code Playgroud)

int*_*jay 5

在您的消息循环中,您需要调用IsDialogMessage要由对话框处理的键盘事件(例如 Tab 键)。这在此处进行了描述。

下面是一个例子:

while (GetMessage(&msg, NULL, 0, 0) > 0) {
    if (!IsDialogMessage(dialogHandle, &msg)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
Run Code Online (Sandbox Code Playgroud)