Как оказывается SetFocus(), не всегда делает то что можно от него ожидать не читая для докумментацию:) Для wxWindow все ок:
This sets the window to receive keyboard input.
А вот для wxPanel ситуация совсем другая:
Overrides wxWindow::SetFocus. This method uses the (undocumented) mix-in class wxControlContainer which manages the focus and TAB logic for controls which usually have child controls. In practice, if you call this method and the control has at least one child window, the focus will be given to the child window.
А то что надо, делает SetFocusIgnoringChildren()
Незнание этого простого файла, украло у меня вчера почти полтора часа, когда я пытался сделать нормальное управление с клавиатуры, в весьма сложной и запутанной системе. Вернеее украло не у меня, а у работадателя, но тоже нехорошо. Так что читайте доки 🙂