2010-10-28 3 views
0

J'ai un projet MS Visual C++ dans lequel j'ai une boîte de dialogue basée sur CDialog avec plusieurs contrôles d'édition. Je veux mettre en évidence le contrôle avec l'accent actuel pour l'utilisateur. Je l'ai implémenté en obtenant un pointeur vers la fenêtre qui a le focus en cours avec GetFocus() et en obtenant l'ID pour le contrôle focus avec GetDlgCtrlID():Restriction de GetFocus à une boîte de dialogue et/ou une application spécifique

CWnd * pWnd = GetFocus();

idfocus = (pWnd-> GetDlgCtrlID()); Je compare ensuite cela à la commande actuelle pour laquelle le HBRUSH est défini dans la fonction membre OnCtlColor.

Cela fonctionne très bien jusqu'à ce que je clique sur la fenêtre pour une autre application fonctionnant sur mon PC. Comme Firefox. À quel moment mon application se bloque.

Quelle est la meilleure façon de trouver le contrôle, le cas échéant, dans une boîte de dialogue spécifique, et seulement cette boîte de dialogue particulière, a le focus? Ou peut-être limiter à la même application.

+0

Avez-vous une pile d'appel provenant du plantage de votre application? Je ne vois pas pourquoi ce code pourrait causer cela. –

Répondre

0

Toutes les commandes de votre boîte de dialogue sont essentiellement des enfants de votre boîte de dialogue principale. Vous pouvez donc créer une restriction en vérifiant d'abord si le contrôle en cours est un enfant de votre boîte de dialogue (vous pouvez utiliser GetParent()) avant d'effectuer les opérations souhaitées.

Questions connexes