Изначально у меня был код, который устанавливал фокус на первый виджет в диалоговом окне в методе onInit. Но с этим были проблемы: если я нажимал TAB, фокус действительно перемещался на следующий элемент управления (wxTextCtrl), который получал синий цвет «фокуса», но цвет/подсветка «фокуса» не удалялся из предыдущего виджета фокуса< /сильный>. Так что теперь это выглядело так, как будто и первый, и второй элемент управления были в фокусе одновременно...
При циклическом ручном (нажатием TAB) полном круге (до последнего элемента управления, а затем переходе к первому) внезапно все заработало. То есть при перемещении фокуса с первого контрола на следующий первый визуально терял фокус (убрался синий цвет) как надо. Отныне только один элемент имел цвет/выделение фокуса.
Поэтому вместо установки фокуса на первый элемент управления я попробовал другой подход: я установил фокус на последний элемент управления в диалоговом окне, которым всегда является кнопка OK. Затем я хочу программно эмулировать, что TAB нажимается и принимается диалогом. Итак, я написал это (внутри Dialog::onInit):
m_buttonOK->SetFocus();
wxKeyEvent key;
key.SetEventObject(this);
key.SetEventType(wxEVT_CHAR);
key.m_keyCode=WXK_TAB;
ProcessWindowEvent(key);
Теперь фокус действительно перемещается от кнопки OK, но не переходит к первому элементу управления. Только когда я вручную нажимаю TAB после открытия диалогового окна, первый элемент получает фокус.
Вопрос: почему этот переход для установки фокуса на первый виджет не работает с кодом, показанным выше?