Я хочу использовать клавишу табуляции, чтобы изменить фокус между 6 элементами управления.
Я установил стиль родительского окна на WS_EX_CONTROLPARENT
Я установил стиль элементов управления на WS_TABSTOP
Я вызываю IsDialogMessage, чтобы игнорировать сообщения, которые были обработаны
Это прекрасно работает!
Теперь я хочу разделить элементы управления на две группы по три, чтобы табуляция в третьем элементе управления возвращала фокус к первому и табуляция в шестом возвращает управление четвертому (а не первому)
Поэтому я добавляю WS_GROUP к стилю первого и четвертого элемента управления
auto ret = SetWindowLongPtr(
myEditbox.handle(),
GWL_STYLE,
GetWindowLongPtr( myEditbox.handle(), GWL_STYLE) | WS_GROUP );
if( ret == 0 )
throw std::runtime_error("setGroupStyle");
Ничего не происходит , Вкладка заставляет фокусировку клавиатуры перемещаться по элементам управления с 1 по 6 и обратно на 1. Как и прежде.
@ PaulSanders указывает, что WS_GROUP влияет на поведение клавиши со стрелкой, а НЕ на клавишу табуляции. Подтверждение этому появляется в документации Windows.
Окно является первым элементом управления группы элементов управления. Группа состоит из этого первого элемента управления и всех элементов управления, определенных после него, вплоть до следующего элемента управления со стилем WS_GROUP. Первый элемент управления в каждой группе обычно имеет стиль WS_TABSTOP, чтобы пользователь мог переходить из группы в группу. Пользователь может впоследствии изменить фокус клавиатуры с одного элемента управления в группе на следующий элемент управления в группе, используя клавиши со стрелками. Вы можете включить или выключить этот стиль, чтобы изменить навигацию в диалоговом окне. Чтобы изменить этот стиль после создания окна, используйте функцию SetWindowLong. (https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles)
Итак, я попытался удалить стиль WS_TABSTOP из элементов управления, ожидая, что регуляторы направления изменят фокус. Не работает - клавиши со стрелками просто перемещают текстовый курсор через элемент управления редактирования, а не фокус между элементами управления.
Что мне нужно сделать больше или по-другому?