Это было навсегда, так как я должен был сделать это, но ...
Если бы это диалоговое окно, я бы сказал вам, чтобы отправить WM_NEXTDLGCTL через PostMessage(). Обработчик сообщения элемента диалога по умолчанию позаботится о том, чтобы вы установили настройку клавиатуры и активацию выделения. Однако, если я прочитал это правильно, это другой случай. Вы создаете родительские и дочерние окна на лету. Если это так, SetFocus() в родительском окне и обработайте WM_SETFOCUS в родительском окне, приведя его вверх, а затем установите фокус на дочернем окне. WM_SETFOCUS и WM_KILLFOCUS были разработаны, чтобы вы могли переключать «активированное» состояние своих элементов управления, и большинство из них обрабатывают его для вас (если ваше окно не является элементом управления рисованием владельца или некоторыми такими). Но в необработанном окне, когда ваше базовое родительское окно отправляется в фокус, вам необходимо надлежащим образом обеспечить, чтобы у него был соответствующий ребенок, если у вас есть какой-либо (подумайте об этом как об управлении своим «диалогом»). Опять же, обычно это делается с помощью диалоговой процедуры по умолчанию для вас, если это диалог, но, будучи необработанными окнами, вы как бы застреваете, управляя всем этим самим.
Хотя я не могу представить, как, надеюсь, это несколько помогло.
Это кнопка в диалоговом окне? – Anders
nope, window и button, созданные во время выполнения с использованием createwindowex – Martin
Как вы подтверждаете, что у него нет фокуса? Что возвращает 'GetFocus', если не' button'? –