2010-10-07 3 views
0

Je développe une application MDI, le document principal est maximisé dans le cadre MDI. Je crée une boîte de dialogue non modale pour afficher des informations secondaires à l'utilisateur pendant qu'il travaille dans la fenêtre principale. Cependant, lorsque l'utilisateur déplace la fenêtre contextuelle, le focus est attendu. Le problème se produit lorsque cette fenêtre a le focus et qu'un événement qui génère un AfxMessageBox se produit dans le mainframe. Je m'attendrais à ce que AfxMessageBox apparaisse centré sur l'ordinateur central. Actuellement, il apparaît centré sur la fenêtre contextuelle de dialogue non-modale qui, par chance, était focalisée à ce moment-là.Comment forcer AfxMessageBox à se centrer sur le mainframe et non sur la fenêtre enfant qui a actuellement le focus

Existe-t-il un moyen de forcer AfxMessageBox à toujours se centrer sur l'ordinateur central? Ou au moins le forcer à pop-up centré sur la fenêtre dans laquelle il a été appelé. Par exemple, si une erreur survient dans ma boîte de dialogue non-modale, je voudrais que AfxMessageBox apparaisse centré sur cette boîte de dialogue car c'est intuitif que l'erreur s'est produite. Sinon, si je travaille avec la boîte de dialogue non-modale et qu'une erreur survient dans le mainframe ou le document, je voudrais que AfxMessageBox apparaisse centré sur sa vue/image malgré le fait que je travaille actuellement avec la fenêtre enfant.

J'espère que c'est assez clair.

Répondre

0

Pouvez-vous utiliser à la place standard :: MessageBox avec le premier paramètre (parent) égal à NULL. Dans ce cas, le bureau sera utilisé comme parent, il sera donc centré sur l'écran.

+0

Merci pour la réponse. – Dillyman

3

Utilisez plutôt la méthode CWnd :: MessageBox().

+0

J'ai utilisé cela comme un test et cela a fonctionné parfaitement. Cependant, nous utilisons Prof-UIS donc j'ai utilisé leur CExtMessageBox :: DoMsgBox() pour accomplir la même chose. – Dillyman

3

Continuez à utiliser AfxMessageBox mais remplacez DoMessageBox de votre sous-classe CWinApp. Dans votre override faire ce que vous voulez afficher une boîte de message à l'utilisateur en utilisant ::MessageBox() ou même en affichant une boîte de dialogue personnalisée. Cela vous évite de remplacer les appels par AfxMessageBox dans vos fichiers de code source.

+0

Merci pour la réponse. – Dillyman

Questions connexes