Modification des styles d'une fenêtre créée par MFC
Dans sa version de la WinMain
fonction, MFC inscrit plusieurs classes de fenêtre standard pour vous. Étant donné que vous ne modifiez pas normalement les styles de WinMain
fenêtre MFC, cette fonction ne vous donne pas la possibilité de modifier les styles de fenêtre par défaut MFC. Cet article explique comment modifier les styles d’une telle classe de fenêtre préinscrire dans une application existante.
Modification des styles dans une nouvelle application MFC
Si vous utilisez Visual C++ 2.0 ou version ultérieure, vous pouvez modifier les styles de fenêtre par défaut dans l’Assistant Application lorsque vous créez votre application. Dans la page Fonctionnalités de l’interface utilisateur de l’Assistant Application, vous pouvez modifier les styles de votre fenêtre cadre principale et des fenêtres enfants MDI. Pour l’un ou l’autre type de fenêtre, vous pouvez spécifier son épaisseur d’image (épaisse ou mince) et l’une des options suivantes :
Indique si la fenêtre a des contrôles Réduire ou Agrandir.
Indique si la fenêtre apparaît initialement réduite, agrandie ou non.
Pour les fenêtres de cadre principal, vous pouvez également spécifier si la fenêtre a un menu système. Pour les fenêtres enfants MDI, vous pouvez spécifier si la fenêtre prend en charge les volets de fractionnement.
Modification des styles dans une application existante
Si vous modifiez les attributs de fenêtre dans une application existante, suivez les instructions du reste de cet article à la place.
Pour modifier les attributs de fenêtre par défaut utilisés par une application framework créée avec l’Assistant Application, remplacez la fonction membre virtuelle PreCreateWindow de la fenêtre. PreCreateWindow
permet à une application d’accéder au processus de création normalement géré en interne par la classe CDocTemplate . L’infrastructure appelle PreCreateWindow
juste avant de créer la fenêtre. En modifiant la structure CREATESTRUCT passée à PreCreateWindow
, votre application peut modifier les attributs utilisés pour créer la fenêtre. Par exemple, pour vous assurer qu’une fenêtre n’utilise pas de légende, utilisez l’opération au niveau du bit suivante :
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
L’exemple d’application CTRLBARS illustre cette technique pour modifier les attributs de fenêtre. Selon ce que votre application change PreCreateWindow
, il peut être nécessaire d’appeler l’implémentation de classe de base de la fonction.
La discussion suivante traite de l’affaire SDI et de l’affaire MDI.
Le cas SDI
Dans une application SDI (Single Document Interface), le style de fenêtre par défaut dans l’infrastructure est une combinaison des styles WS_OVERLAPPEDWINDOW et FWS_ADDTOTITLE . FWS_ADDTOTITLE est un style spécifique à MFC qui indique au framework d’ajouter le titre du document à la légende de la fenêtre. Pour modifier les attributs de fenêtre dans une application SDI, remplacez la PreCreateWindow
fonction de votre classe dérivée CFrameWnd
(dont les noms CMainFrame
de l’Assistant Application). Par exemple :
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs)
{
// Call the base-class version
if (!CFrameWnd::PreCreateWindow(cs))
return FALSE;
// Create a window without min/max buttons or sizable border
cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;
// Size the window to 1/3 screen size and center it
cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
cs.y = ((cs.cy * 3) - cs.cy) / 2;
cs.x = ((cs.cx * 3) - cs.cx) / 2;
return TRUE;
}
Ce code crée une fenêtre d’image principale sans boutons Réduire et Agrandir et sans bordure sizable. La fenêtre est initialement centrée sur l’écran.
Le cas MDI
Un peu plus de travail est nécessaire pour modifier le style de fenêtre d’une fenêtre enfant dans une application MDI (Multiple Document Interface). Par défaut, une application MDI créée avec l’Assistant Application utilise la classe CMDIChildWnd par défaut définie dans MFC. Pour modifier le style de fenêtre d’une fenêtre enfant MDI, vous devez dériver une nouvelle classe et CMDIChildWnd
remplacer toutes les références dans CMDIChildWnd
votre projet par des références à la nouvelle classe. Probablement, la seule référence à CMDIChildWnd
l’application se trouve dans la fonction membre de InitInstance
votre application.
Le style de fenêtre par défaut utilisé dans une application MDI est une combinaison des styles WS_CHILD, WS_OVERLAPPEDWINDOW et FWS_ADDTOTITLE. Pour modifier les attributs de fenêtre des fenêtres enfants d’une application MDI, remplacez la fonction PreCreateWindow dans votre classe dérivée de CMDIChildWnd
. Par exemple :
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
// Create a child window without the maximize button
cs.style &= ~WS_MAXIMIZEBOX;
return CMDIChildWnd::PreCreateWindow(cs);
}
Ce code crée des fenêtres enfants MDI sans bouton Agrandir.