В нашем приложении есть ряд диалогов, для которых шаблон диалога определяет 4 кнопки в нижней части экрана.Однако (в зависимости от того, на какой версии нашего оборудования работает приложение) мы иногда создаем 2 дополнительные кнопки, а затем выстраиваем в ряд 6 кнопок (4 из шаблона, 2, созданные с помощью вызова CButton :: Create ()) вдоль нижней части.
У меня проблема в том, что обычно пользователь может перемещать фокус между этими кнопками с помощью клавиш со стрелками влево / вправо (нет мыши или сенсорного экрана, только ограниченная клавиатура).Это следует за TAB-порядком управления, как и следовало ожидать для 4 кнопок из шаблона. Однако 2 динамически создаваемых элемента управления, по-видимому, вставляются в начале TAB-порядка, и это означает (потому что они размещены в правой части экрана), что они находятся в «неправильном»msgstr "порядок, насколько идут клавиши курсора.Другими словами, когда фокус попадает на левую кнопку (порядок TAB 1), нажатие левой стрелки перемещает фокус на кнопку на правой стороне, что просто сбивает с толку ...
Кажется, что есть некоторая связь между Z-порядком (на который я могу повлиять SetWindowPos()
) и TAB-порядком, но это не похоже на простое отношение 1 к 1: изменяя Z-порядок, я могу перемещать последовательностьвокруг так, чтобы кнопки были полностью в неправильном порядке, поэтому я могу изменить Z-порядок, но не могу понять, как получить их в правильном порядке.
Может ли кто-нибудь дать краткое объяснение того, как работает порядок TAB и как управлять последовательностью элементов управления во время выполнения?
Редактировать: Кол, предложенный ниже с использованием SetWindowPos()
установить Z-порядок.Это я уже пробовал раньше, но это не позволяет клавишам курсора управлять фокусом, как ожидалось.
Однако, подтасовав это, я могу использовать TAB (в качестве теста - это не практично для конца-пользовательское решение) Я считаю, что решение Кола разрешает TAB-порядок.У меня проблема в том, что это не такой же, как порядок, используемый клавишами курсора!
Итак, пересмотрен вопрос: как я могу указать порядок, в котором левые / правые клавиши курсорапереместить фокус между элементами управления?
Решение: С помощью входов kol и MarkRansom я получил это сейчас.
Я использовал SetWindowPos()
, как предложил kol дляпоставил мои новые кнопки после существующих кнопок в порядке TAB, а затем (как предложил Марк) сделал первую кнопку WS_GROUP | WS_TABSTOP
, но очистил эти флаги от других кнопок.
Однако этоэтого было недостаточно, чтобы решить проблему, поскольку две новые кнопки по-прежнему появлялись перед первой, а не после второй при использовании клавиш со стрелками (не TAB) для перемещения.
Я посмотрел на свой шаблон диалога,и это было так:
IDD_QUERY DIALOG 0, 0, 156, 34
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "+++Skey1+++",IDC_SKEY_1,1,21,36,12
PUSHBUTTON "+++Skey2+++",IDC_SKEY_2,40,21,37,12
PUSHBUTTON "+++Skey3+++",IDC_SKEY_3,79,21,36,12
PUSHBUTTON "+++Skey4+++",IDC_SKEY_4,118,21,36,12
LTEXT "Static",IDC_QUERY_MSG,2,1,153,15
END
Таким образом, статический IDC_QUERY_MSG
, который используется для отображения информации для пользователя, шел после 4-й кнопки в шаблоне.Чтобы решить проблему, я переместил IDC_QUERY_MSG
до первой кнопки (IDC_SKEY_1
): это означает, что 6 кнопок не разделены статическим промежуточным звеном, и решил проблему.
Спасибо всем за помощь!