Как перемещаться между элементами управления в окне клавишей TAB? - PullRequest
2 голосов
/ 19 марта 2012

Я создал окно, вызвав CreateWindow, и поместил в него 2 элемента управления редактированием. Элементы управления редактирования имели стиль WS_TABSTOP, который был включен. Я мог изменить его текст, но навигация между элементами управления клавишей TAB не работала.

Я поместил этот код в свой цикл сообщений:

MSG msg;
while ( GetMessage( &msg, NULL, 0, 0 ) )
{
    if ( !msg.hwnd || !IsDialogMessage( msg.hwnd, &msg ) )
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
}

К сожалению, навигация по TAB не работала, элементы управления редактирования не редактировались, и после нажатия клавиши TAB происходило только выделение текста первого элемента управления. Кто-нибудь может мне помочь?

Ответы [ 2 ]

5 голосов
/ 19 марта 2012

Дескриптор окна, который вы передаете IsDialogMessage, является диалоговым окном, по которому вы хотите перейти. Вы передаете окно, получившее сообщение, которое, вероятно, является элементом редактирования, а не окном верхнего уровня.

0 голосов
/ 19 марта 2012

У вас есть два основных варианта: либо поместить элементы управления в фактический диалог (который вы будете вызывать с помощью DialogBox (или одного из его близких родственников, таких как DialogBoxEx)), либо обрабатывать табуляцию самостоятельно.

В последнем случае вам нужно реагировать при вводе tab и установить фокус на другой элемент управления. Случайно, я не помню, можете ли вы справиться с этим через WM_NOTIFY, или вам придется подклассить элементы управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...