Il a été FOREVER depuis que j'ai dû le faire, mais ...
Si cela était une boîte de dialogue, je vous dire d'envoyer un WM_NEXTDLGCTL via PostMessage(). Le gestionnaire de message de l'élément de boîte de dialogue par défaut s'occupera du reste pour la configuration du focus du clavier et de l'activation de la sélection. Cependant, ceci est un cas différent si je le lis correctement. Vous créez des fenêtres parent et enfant crues à la volée. Si tel est le cas, définissez SetFocus() sur la fenêtre parente et gérez WM_SETFOCUS sur la fenêtre parente en l'amenant au premier plan, puis définissez le focus sur la fenêtre enfant. WM_SETFOCUS et WM_KILLFOCUS ont été conçus pour vous permettre de changer l'état 'activé' de vos contrôles, et la plupart le gèrent pour vous (à moins que votre fenêtre ne soit un contrôle de tirage de propriétaire ou autre). Mais dans une fenêtre brute, lorsque la fenêtre de base de votre parent est envoyée, vous devez vous assurer que le bon enfant l'a si vous en hébergez (pensez-y comme gérant votre propre 'dialogue'). Encore une fois, normalement cela est fait par la procédure de dialogue par défaut pour vous si c'était une boîte de dialogue, mais étant des fenêtres brutes, vous êtes en quelque sorte bloqué en gérant tout vous-même.
Bien que je ne peux pas imaginer comment, j'espère que cela a aidé un peu.
Le bouton est-il dans une boîte de dialogue? – Anders
nope, fenêtre et bouton créés lors de l'exécution à l'aide de createwindowex – Martin
Comment vérifiez-vous qu'il n'a pas le focus? Que renvoie 'GetFocus', sinon' button'? –