Как установить порядок вкладок для элементов управления пользовательского интерфейса в Win 32? - PullRequest
1 голос
/ 06 апреля 2010

всем привет, у меня есть небольшой диалог, который я создал динамически, в котором есть текстовое поле и кнопка ... если пользователь нажимает клавишу 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 Ответ

4 голосов
/ 06 апреля 2010

В вашем цикле сообщений вам нужно вызвать IsDialogMessage, чтобы события клавиатуры (например, клавиша табуляции) обрабатывались диалоговым окном.Это описано здесь .

Вот пример:

while (GetMessage(&msg, NULL, 0, 0) > 0) {
    if (!IsDialogMessage(dialogHandle, &msg)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...