2010-09-13 40 views
0

J'ai une application avec un cadre personnalisé (c'est-à-dire, légende/barre de titre, bordures). J'ai personnalisé le cadre en supprimant le style WS_CAPTION et en remplaçant OnNcCalcSize pour réserver une zone de taille personnalisée pour la légende, que l'application peint dans OnNcPaint.Est-il possible de modifier l'emplacement du menu principal de niveau supérieur dans une application MDI MDI?

Un effet secondaire est que la barre de menu ne s'affiche plus, ce qui est OK car je veux personnaliser l'emplacement & du menu principal. Malheureusement, je ne sais pas comment faire ça. Je voudrais que le menu "Fichier" soit plus éloigné du bord gauche que de la barre de menu standard.

Une alternative acceptable consisterait à supprimer entièrement le menu et à utiliser OnNcHitTest, OnNcPaint et OnNcMouseMove pour gérer un remplacement codé à la main pour le menu de niveau supérieur.

Répondre

0

Je n'ai jamais vu un moyen de modifier l'apparence du menu standard. Vous pouvez le supprimer (supprimez le code de création de votre InitInstance), puis codez un remplacement. Je ne ferais pas cela dans OnNcXXX, mais plutôt faire un nouveau contrôle personnalisé que vous placez en haut. Ou vous pouvez jeter un oeil aux menus sur le thème de MFC Next et écrire un moteur de rendu d'interface utilisateur personnalisé. Il peut suffire d'annuler quelques fonctions restantes et de rouler pour régler l'alignement du menu.

0

C'est une application MDI MDI - InitInstance n'est pas l'endroit où le menu est créé. J'ai essayé de me débarrasser du menu (et réussi, temporairement) mais le cadre de MFC semble être "le remettre" - je pense que le modèle MDI a les fenêtres d'enfant modifient le menu, mais le code qui fait cela semble être enterré dans le framework quelque part (ou bien je n'ai juste pas pu trouver exactement où ça se passe dans le code de l'application, mais je pense que ça se passe dans le code framework de MFC). Si je savais où, je pourrais peut-être passer outre les méthodes et prendre le contrôle ... je pense.

Quelle serait la raison d'écrire un contrôle personnalisé par rapport à la gestion OnNcMouseMove & OnNcLeftButtonDown, par exemple? Je ne pense pas avoir besoin de la fonctionnalité dans une autre application (une nouvelle application serait codée en C#, probablement), donc je cherche la facilité de mise en œuvre, pas la réutilisation du code.