2008-09-08 22 views
2

Dans mon application, j'ai une fenêtre dans laquelle j'ai un petit message avec des petits messages (pensez à une info-bulle). Cette fenêtre utilise les attributs en couches pour dessiner des arrière-plans alpha etc.Comment créer une fenêtre non interactive dans le MFC

Si plusieurs de ces fenêtres sont ouvertes à la fois et que je clique sur une avec ma souris, lorsqu'elles disparaissent, mon application perd son focus (elle bascule le focus sur l'application derrière l'actuelle).

Comment arrêter une interaction dans ma fenêtre?

Répondre

1

Après avoir joué avec le message WM_NCACTIVATE sans chance, je l'emporterait sur le message WM_SETFOCUS:

void CMyWindow::OnSetFocus(CWnd* pOldWnd) 
{ 
    if (pOldWnd != NULL) 
    { 
     pOldWnd->SetFocus(); 
    } 
} 

Cela semble faire l'affaire. Aucune idée de pourquoi cela fonctionne bien! Les commentaires sont les bienvenus sur cette question.

1

Cela fonctionne parce que OnSetFocus (comme la plupart des méthodes On *) vous donne une chance de préempter une action avant qu'elle ne se produise réellement. L'accent ne bascule jamais réellement sur votre fenêtre non interactive.