Modification des styles d'une fenêtre créée par les MFC
Dans sa version de la fonction d' WinMain , MFC inscrit plusieurs classes de fenêtres standard pour vous.Étant donné que vous ne changez pas normalement WinMainMFC, cette fonction ne fournit aucune possibilité de modifier les styles de fenêtre par défaut MFC.Cet article explique comment modifier des styles d'une classe de fenêtre si préenregistré 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 de l'Assistant Application lorsque vous créez votre application.Dans les fonctionnalités de l'interface utilisateur page de l'Assistant Application, vous pouvez modifier des styles pour votre fenêtre frame principale et fenêtres MDI enfants.Pour l'un ou l'autre type de fenêtre, vous pouvez spécifier son épaisseur de frame (lourds ou amincir) et ci-dessous :
Si la fenêtre a pour réduire ou optimiser des contrôles.
Si la fenêtre est initialement réduite, agrandi, ou aucun.
Pour les fenêtres frames principales, vous pouvez également spécifier si la fenêtre possède un menu système.Pour les fenêtres enfants MDI, vous pouvez spécifier si la fenêtre prend en charge les volets de séparateur.
Modification des styles dans une application existante
Si vous modifiez les attributs de fenêtre dans une application existante, suivez les instructions dans le reste de cet article à la place.
Pour modifier les attributs de fenêtre par défaut utilisés par une application d'infrastructure l'a créé à l'aide de l'Assistant Application, substituez la fonction membre virtuelle de 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 de CDocTemplate .l'infrastructure appelle PreCreateWindow juste avant de créer la fenêtre.En modifiant la structure de CREATESTRUCT passée à PreCreateWindow, votre application peut modifier les attributs utilisés pour créer la fenêtre.Par exemple, pour s'assurer qu'une fenêtre n'utilise pas de légende, utilisez l'opérateur de bits suivante :
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
L'exemple d'application de CTRLBARS illustre cette technique pour modifier les attributs de fenêtre.Selon votre application modifie dans PreCreateWindow, il peut être nécessaire d'appeler l'implémentation de la classe de base de la fonction.
La discussion suivante décrit le cas d'une interface SDI et le Cas MDI.
Le cas d'une interface SDI
Dans une application interface (SDI) mono document (SDI, le style de fenêtre par défaut dans l'infrastructure est une combinaison des styles de WS_OVERLAPPEDWINDOW et de FWS_ADDTOTITLE .FWS_ADDTOTITLE est un style de MFC-détail qui demande à l'infrastructure d'ajouter le titre du document à la légende de la fenêtre.Pour modifier les attributs de fenêtre dans une application SDI, substituez la fonction d' PreCreateWindow de votre classe dérivée d' CFrameWnd (que l'Assistant Application nomme CMainFrame).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 frame principale sans réduction et d'agrandissement des boutons et sans bordure dimensionnable.La fenêtre est initialement centré 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 (MDI) application d'interface multidocument.Par défaut, une application MDI créée à l'aide de l'Assistant Application utilise la classe par défaut de CMDIChildWnd définie dans MFC.Pour modifier le style de fenêtre d'une fenêtre enfant MDI, vous devez dériver une nouvelle classe d' CMDIChildWnd et remplacer toutes les références à CMDIChildWnd dans votre projet par des références à la nouvelle classe.Très probablement, la seule référence à CMDIChildWnd dans l'application se trouve dans la fonction membre d' InitInstance de votre application.
Le style de fenêtre par défaut utilisé dans une application MDI est une combinaison des styles de WS_CHILD, de WS_OVERLAPPEDWINDOW, et de FWS_ADDTOTITLE .Pour modifier les attributs de fenêtre les fenêtres enfants d'une application MDI, substituez la fonction de PreCreateWindow de votre classe dérivée d' 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 d'optimiser.