Modifica degli stili di una finestra creata da MFC

Nella sua versione della funzione, MFC registra diverse classi di finestre standard per l'utente WinMain . Poiché in genere non si modifica l'oggetto MFC, WinMainquesta funzione non consente di modificare gli stili di finestra predefiniti di MFC. Questo articolo illustra come modificare gli stili di una classe finestra preregistrata in un'applicazione esistente.

Modifica degli stili in una nuova applicazione MFC

Se si usa Visual C++ 2.0 o versione successiva, è possibile modificare gli stili di finestra predefiniti nella Creazione guidata applicazione quando si crea l'applicazione. Nella pagina Funzionalità interfaccia utente della Creazione guidata applicazione è possibile modificare gli stili per la finestra cornice principale e le finestre figlio MDI. Per entrambi i tipi di finestra, è possibile specificare lo spessore del fotogramma (spessore o sottile) e uno dei seguenti:

  • Indica se nella finestra sono presenti controlli Riduci a icona o Ingrandisci.

  • Indica se la finestra viene visualizzata inizialmente ridotta a icona, ingrandita o nessuna delle due.

Per le finestre cornice principale, è anche possibile specificare se la finestra ha un menu di sistema. Per le finestre figlio MDI, è possibile specificare se la finestra supporta riquadri di divisione.

Modifica degli stili in un'applicazione esistente

Se si modificano gli attributi della finestra in un'applicazione esistente, seguire le istruzioni riportate nel resto di questo articolo.

Per modificare gli attributi di finestra predefiniti usati da un'applicazione framework creata con la Creazione guidata applicazione, eseguire l'override della funzione membro virtuale PreCreateWindow della finestra. PreCreateWindow consente a un'applicazione di accedere al processo di creazione normalmente gestito internamente dalla classe CDocTemplate . Il framework chiama PreCreateWindow solo prima di creare la finestra. Modificando la struttura CREATESTRUCT passata a PreCreateWindow, l'applicazione può modificare gli attributi usati per creare la finestra. Ad esempio, per assicurarsi che una finestra non usi un didascalia, usare l'operazione bit per bit seguente:

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

L'applicazione di esempio CTRLBARS illustra questa tecnica per la modifica degli attributi della finestra. A seconda delle modifiche apportate all'applicazione in PreCreateWindow, potrebbe essere necessario chiamare l'implementazione della classe di base della funzione.

La discussione seguente illustra il caso SDI e il caso MDI.

Caso SDI

In una singola applicazione SDI (Document Interface), lo stile di finestra predefinito nel framework è una combinazione degli stili WS_OVERLAPPEDWINDOW e FWS_ADDTOTITLE . FWS_ADDTOTITLE è uno stile specifico di MFC che indica al framework di aggiungere il titolo del documento alla didascalia della finestra. Per modificare gli attributi della finestra in un'applicazione SDI, eseguire l'override della PreCreateWindow funzione nella classe derivata da (da CFrameWnd cui il CMainFramenome della Creazione guidata applicazione ). Ad esempio:

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

Questo codice crea una finestra cornice principale senza pulsanti Riduci a icona e Ingrandisci e senza un bordo ridimensionabile. La finestra è inizialmente allineata al centro sullo schermo.

Caso MDI

Per modificare lo stile della finestra di una finestra figlio in un'applicazione MDI (Multiple Document Interface) è necessario un po' di lavoro. Per impostazione predefinita, un'applicazione MDI creata con la Creazione guidata applicazione usa la classe CMDIChildWnd predefinita definita in MFC. Per modificare lo stile della finestra di una finestra figlio MDI, è necessario derivare una nuova classe da CMDIChildWnd e sostituire tutti i riferimenti a CMDIChildWnd nel progetto con riferimenti alla nuova classe. Molto probabilmente, l'unico riferimento a CMDIChildWnd nell'applicazione si trova nella funzione membro dell'applicazione InitInstance .

Lo stile di finestra predefinito usato in un'applicazione MDI è una combinazione degli stili WS_CHILD, WS_OVERLAPPEDWINDOW e FWS_ADDTOTITLE . Per modificare gli attributi della finestra delle finestre figlio di un'applicazione MDI, eseguire l'override della funzione PreCreateWindow nella classe derivata da CMDIChildWnd. Ad esempio:

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

   return CMDIChildWnd::PreCreateWindow(cs);
}

Questo codice crea finestre figlio MDI senza un pulsante Ingrandisci.

Cosa vuoi sapere di più su

Vedi anche

Stili finestra cornice