Другие способы программного изменения порядка табуляции в диалоговом окне

Я пытаюсь выяснить, почему некоторые из моих динамически созданных дочерних элементов управления в диалоговом окне Windows не работают, когда дело доходит до навигации по ним с помощью клавиши табуляции. При отсутствии каких-либо дополнительных действий с ними порядок должен определяться порядком, в котором они добавляются в диалоговое окно, но один конкретный тип дочернего элемента управления постоянно сортируется последним.

Я знаю, что в одну сторону чтобы изменить их порядок, используйте SetWindowPos(), используя параметр hWndInsertAfter и не устанавливая флаг SWP_NOZORDER. Я совершенно уверен, что устранил это как возможную причину этого повторного заказа.

Итак, для дальнейшего изучения этого, а также просто для справки в будущем, кроме SetWindowPos(), какие другие вызовы win32 могут изменить порядок существующих дочерних элементов управления в диалоговом окне?


person Doug Kavendek    schedule 13.07.2011    source источник


Ответы (1)


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

Если диалоговое окно или элементы управления нестандартны, порядком табуляции можно управлять непосредственно с помощью WndProc. Как правило, это плохая идея, но известно, случалось время от времени.

person Jon    schedule 13.07.2011
comment
Забыл об этом вопросе, но я считаю, что проблема действительно заключалась в каком-то бродячем коде, который имел SetWindowPos() в качестве побочного эффекта, из-за чего их z-порядок сместился больше, чем ожидалось. - person Doug Kavendek; 10.04.2012