La classe CFrameWnd fournit la fonctionnalité d'une interface de Windows monodocument (SDI) se chevauchaient ou fenêtre cadre contextuel, ainsi que des membres pour la gestion de la fenêtre.
Pour créer une fenêtre d'image utile pour votre application, dérivez une classe de CFrameWnd. Ajoutez les variables de membre à la classe dérivée pour stocker des données spécifiques à votre application. Fonctions de membres du gestionnaire de messages mise en oeuvre et un message (carte) dans la classe dérivée de spécifier ce qui se passe lorsque les messages sont dirigés vers la fenêtre.
Il existe trois façons de construire une fenêtre frame:
Indirectement, construire à l'aide d'un modèle de document.
Avant de vous appeler soit créer soit le cas, vous devez construire l'objet fenêtre frame sur le tas à l'aide de l'opérateur new C++. Avant d'appeler Create, vous pouvez également enregistrer une classe de fenêtre avec la fonction globale AfxRegisterWndClass pour définir les styles d'icône et de classe pour le cadre.
Utilisez la fonction de membre de créer pour passer des paramètres de création de l'image comme arguments immédiates.
Cas nécessite moins d'arguments que créeret récupère au lieu de cela la plupart de ses valeurs par défaut des ressources, y compris du cadre légende, icône, table d'accélérateurs et menu. Pour être accessible par le cas, toutes ces ressources doivent avoir le même ID de ressource (par exemple, IDR_MAINFRAME).
Lorsqu'un objet de classe CFrameWnd contient des vues et des documents, ils sont créés indirectement par le cadre plutôt que directement par le programmeur. L'objet CDocTemplate orchestre la création de l'image, la création des vues contenant et la connexion des points de vue le document approprié. Les paramètres du constructeur CDocTemplate spécifient la CRuntimeClass des trois classes impliquées (document, cadre et vue). Un objet CRuntimeClass est utilisé par le framework pour créer dynamiquement des nouveaux cadres lorsque spécifié par l'utilisateur (par exemple, à l'aide de la commande fichier nouveau ou la nouvelle fenêtre commande de multiple document interface (multidocument MDI)).
Une classe de fenêtre frame dérivée de CFrameWnd doit être déclarée avec DECLARE_DYNCREATE afin que le mécanisme RUNTIME_CLASS ci-dessus fonctionne correctement.
CFrameWnd contient des implémentations par défaut pour exécuter les fonctions suivantes de la fenêtre principale dans une application typique pour Windows:
Une fenêtre frame de CFrameWnd tient compte des vue actuellement active qui est indépendant de la fenêtre active de Windows ou le focus d'entrée actuel. Lorsque la trame est réactivée, la vue active est notifiée en appelant CView::OnActivateView.
Messages de commande et de nombreux messages courants de cadre-notification, y compris celles gérées par les OnSetFocuset fonctions membres OnHScrollOnVScroll fonctions CWnd, sont déléguées par la vue actuellement active une fenêtre frame CFrameWnd.
La vue actuellement active (ou actuellement active fenêtre frame enfant MDI dans le cas d'une frame MDI) peut déterminer la légende de la fenêtre frame. Cette fonctionnalité peut être désactivée en désactivant le bit de style FWS_ADDTOTITLE de la fenêtre frame.
Une fenêtre frame de CFrameWnd gère le positionnement des autres fenêtres de l'enfant à l'intérieur de la zone client de la fenêtre frame, vues et les barres de contrôles. Une fenêtre frame fait aussi tourner au ralenti-temps mise à jour de la barre d'outils et d'autres boutons de la barre de contrôle. Une fenêtre frame de CFrameWnd possède également des implémentations par défaut des commandes pour basculer sur et en dehors de la barre de statut et de la barre d'outils.
Une fenêtre frame de CFrameWnd gère la barre de menu principale. Lorsqu'un menu contextuel est affiché, la fenêtre frame utilise le mécanisme UPDATE_COMMAND_UI afin de déterminer quels éléments de menu doivent être activés, désactivés ou vérifiés. Lorsque l'utilisateur sélectionne un élément de menu, la fenêtre frame met à jour la barre d'État avec la chaîne de message pour cette commande.
Une fenêtre frame de CFrameWnd a une table d'accélérateurs facultatif qui traduit automatiquement les accélérateurs de clavier.
Une fenêtre frame de CFrameWnd a un facultatif aide ID avec le cas qui est utilisé pour l'aide contextuelle. Une fenêtre frame est la principale orchestrator de semi-modaux tels que l'aide contextuelle (SHIFT + F1) et les modes de l'aperçu avant impression.
Une fenêtre frame de CFrameWnd ouvrira un fichier traîné par le gestionnaire de fichiers et larguées sur la fenêtre frame. Si une extension de fichier est enregistrée et associée à l'application, la fenêtre frame répond à la demande ouvert dynamic data exchange (DDE) qui se produit lorsque l'utilisateur ouvre un fichier de données dans le gestionnaire de fichiers ou lorsque la fonction de Windows ShellExecute est appelée.
Si la fenêtre frame est la fenêtre d'application principale (c'est-à-dire CWinThread::m_pMainWnd), lorsque l'utilisateur ferme l'application, la fenêtre frame invite l'utilisateur à enregistrer les documents modifiés (pour OnClose et OnQueryEndSession).
Si la fenêtre frame est la fenêtre principale de l'application, la fenêtre frame est dans ce contexte d'exécution de WinHelp. Fermeture de la fenêtre frame sera fermé de WINHELP.EXE si il a été lancé à l'aide de cette application.
Ne pas utiliser l'opérateur delete de C++ pour détruire une fenêtre frame. Utilisez plutôt CWnd::DestroyWindow . La mise en œuvre de la classe CFrameWnd de PostNcDestroy supprime l'objet C++ quand la fenêtre est détruite. Lorsque l'utilisateur ferme la fenêtre frame, le gestionnaire d'événements par défaut OnClose appelle DestroyWindow.
Pour plus d'informations sur CFrameWnd, voir Sujets de fenêtre Frame dans le Guide du programmeur Visual C++.