Comment créer une fenêtre non interactive dans MFC
-
09-06-2019 - |
Question
Dans mon application, j'ai une fenêtre qui apparaît avec de petits messages (pensez à une info-bulle).Cette fenêtre utilise les attributs en couches pour dessiner des arrière-plans alpha, etc.
Si plusieurs de ces fenêtres sont ouvertes en même temps et que je clique sur une avec ma souris, lorsqu'elles disparaissent, mon application perd le focus (elle bascule le focus sur l'application située derrière l'application actuelle).
Comment arrêter toute interaction dans ma fenêtre ?
La solution 2
Après avoir joué avec le WM_NCACTIVATE
message sans succès, j'ai annulé le WM_SETFOCUS
message:
void CMyWindow::OnSetFocus(CWnd* pOldWnd)
{
if (pOldWnd != NULL)
{
pOldWnd->SetFocus();
}
}
Cela semble faire l'affaire.Je ne sais pas pourquoi ça marche !Les commentaires sont les bienvenus sur cette question.
Autres conseils
Cela fonctionne parce que OnSetFocus (comme la plupart des méthodes On*) vous donne la possibilité d'anticiper une action avant qu'elle ne se produise réellement.Le focus ne passe jamais réellement sur votre fenêtre non interactive.