Delen via


De stijlen van een venster wijzigen dat door MFC is gemaakt

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

In de versie van de WinMain functie registreert MFC verschillende standaardvensterklassen voor u. Omdat u normaal gesproken MFC's WinMainniet bewerkt, biedt die functie u geen mogelijkheid om de standaardvensterstijlen van MFC te wijzigen. In dit artikel wordt uitgelegd hoe u de stijlen van een dergelijke vooraf geregistreerde vensterklasse in een bestaande toepassing kunt wijzigen.

Stijlen wijzigen in een nieuwe MFC-applicatie

Als u Visual C++ 2.0 of hoger gebruikt, kunt u de standaardvensterstijlen in de wizard Toepassing wijzigen wanneer u uw toepassing maakt. Op de pagina Gebruikersinterfacefuncties van de Toepassingswizard kunt u stijlen wijzigen voor uw hoofdframevenster en de MDI-kinder vensters. Voor beide venstertypen kunt u de framedikte (dik of dun) en een van de volgende opties opgeven:

  • Of het venster de besturingselementen Minimaliseren of Maximaliseren heeft.

  • Of het venster in eerste instantie wordt geminimaliseerd, gemaximaliseerd of geen van beide wordt weergegeven.

Voor hoofdframevensters kunt u ook opgeven of het venster een systeemmenu heeft. Voor MDI-kindvensters kunt u opgeven of het venster splitsvensters ondersteunt.

Stijlen wijzigen in een bestaande toepassing

Als u vensterkenmerken in een bestaande toepassing wijzigt, volgt u de instructies in de rest van dit artikel.

Als u de standaardvensterkenmerken wilt wijzigen die worden gebruikt door een frameworktoepassing die is gemaakt met de wizard Toepassing, overschrijft u de functie PreCreateWindow virtual member van het venster. PreCreateWindow biedt een toepassing toegang tot het aanmaakproces dat normaal gesproken intern wordt beheerd door de CDocTemplate-klasse . Het framework roept PreCreateWindow net vóór het maken van het venster aan. Door de CREATESTRUCT-structuur te wijzigen die aan de functie PreCreateWindow is doorgegeven, kan uw applicatie de kenmerken wijzigen die worden gebruikt om het venster te creëren. Als u er bijvoorbeeld voor wilt zorgen dat een venster geen bijschrift gebruikt, gebruikt u de volgende bitsgewijze bewerking:

// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;

De voorbeeldtoepassing CTRLBARS demonstreert deze techniek voor het wijzigen van vensterkenmerken. Afhankelijk van wat uw toepassing verandert in PreCreateWindow, is het mogelijk nodig om de basisklasse-implementatie van de functie aan te roepen.

In de volgende discussie worden de SDI-zaak en de MDI-zaak behandeld.

De SDI-zaak

In één SDI-toepassing (Document Interface) is de standaardvensterstijl in het framework een combinatie van de WS_OVERLAPPEDWINDOW - en FWS_ADDTOTITLE stijlen. FWS_ADDTOTITLE is een MFC-specifieke stijl waarmee het framework wordt geïnstrueerd om de documenttitel toe te voegen aan het bijschrift van het venster. Als u de vensterkenmerken in een SDI-toepassing wilt wijzigen, overschrijdt u de PreCreateWindow functie in uw klasse die is afgeleid van CFrameWnd en die de wizard Toepassing CMainFrame noemt. Voorbeeld:

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;
}

Met deze code wordt een hoofdframevenster gemaakt zonder knoppen minimaliseren en maximaliseren en zonder een aanpasbare rand. Het venster is in eerste instantie gecentreerd op het scherm.

De MDI-kwestie

Er is iets meer werk nodig om de vensterstijl van een onderliggend venster in een MDI-toepassing (Multiple Document Interface) te wijzigen. Standaard gebruikt een MDI-toepassing die is gemaakt met de toepassingswizard de standaardklasse CMDIChildWnd die is gedefinieerd in MFC. Als u de vensterstijl van een onderliggend MDI-venster wilt wijzigen, moet u een nieuwe klasse afleiden van CMDIChildWnd en alle verwijzingen CMDIChildWnd in uw project vervangen door verwijzingen naar de nieuwe klasse. Waarschijnlijk bevindt de enige verwijzing naar CMDIChildWnd in uw toepassing zich in de InitInstance-lidfunctie van de toepassing.

De standaardvensterstijl die wordt gebruikt in een MDI-toepassing is een combinatie van de stijlen WS_CHILD, WS_OVERLAPPEDWINDOW en FWS_ADDTOTITLE . Als u de vensterkenmerken van de onderliggende vensters van een MDI-toepassing wilt wijzigen, overschrijft u de functie PreCreateWindow in uw klasse die is afgeleid van CMDIChildWnd. Voorbeeld:

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
   // Create a child window without the maximize button
   cs.style &= ~WS_MAXIMIZEBOX;

   return CMDIChildWnd::PreCreateWindow(cs);
}

Met deze code worden MDI-kindvensters gemaakt zonder knop Maximaliseren.

Wat wilt u meer weten over

Zie ook

Frame-Window Stijlen