如何在win 32中设置UI控件的Tab键顺序?

时间:2010-04-06 12:52:16

标签: 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);

// setwindowpos

SetWindowPos(NULL,textBoxHandle,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetWindowPos(textBoxHandle,buttonHandle,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

1 个答案:

答案 0 :(得分:4)

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

以下是一个例子:

while (GetMessage(&msg, NULL, 0, 0) > 0) {
    if (!IsDialogMessage(dialogHandle, &msg)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
相关问题