【问题标题】:how to set the tab order for the UI controls in win 32?win 32中如何设置UI控件的tab顺序?
【发布时间】:2011-02-04 19:21:51
【问题描述】:

大家好,我有一个动态创建的小对话框,它有一个文本框和一个按钮。如果用户按下 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(NULL,textBoxHandle,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetWindowPos(textBoxHandle,buttonHandle,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

【问题讨论】:

    标签: c winapi dialog


    【解决方案1】:

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

    这是一个例子:

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

    【讨论】:

    • 我尝试了以下..它似乎不起作用 while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg);调度消息(&msg); IsDialogMessage(textBoxHandle,&msg); IsDialogMessage(buttonHandle,&msg); }
    • @Rakesh:您需要传递对话框句柄,而不是控制句柄。我添加了一个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2011-03-13
    相关资源
    最近更新 更多