Modificando gli stili di una finestra creata da MFC
Nella versione della funzione di WinMain , MFC registra diverse classi di finestre standard per l'utente.Poiché in genere non si modifica WinMaindi MFC, fornisce a tale funzione è alcuna possibilità di modificare gli stili di finestre predefinito di MFC.In questo articolo viene illustrato come modificare gli stili di una classe finestra preregistrato in un'applicazione esistente.
Modificare gli stili in una nuova applicazione MFC
Se si utilizza Visual C++ 2,0 o versione successiva, è possibile modificare gli stili predefiniti della finestra nella procedura guidata quando si crea un'applicazione.Le funzionalità dell'interfaccia utente pagina della procedura guidata, è possibile modificare gli stili per le finestra cornice principale e finestre figlio MDI.Per qualsiasi tipo di finestra, è possibile specificare il peso del frame (spesso o assottigliarsi) e i controlli seguenti:
Se la finestra può ridurre o ingrandire i controlli.
Se la finestra è inizialmente ridotta a icona, ingrandita, o nessuno.
Per le applicazioni utilizzano principali, è anche possibile specificare se la finestra è presente un menu di sistema.Per le finestre figlio MDI, è possibile specificare se una finestra supporta i riquadri del separatore.
Modificare gli stili in un'applicazione esistente
Se si desidera modificare gli attributi della finestra in un'applicazione esistente, seguire le istruzioni nella parte restante di questo articolo anziché.
Per modificare gli attributi predefiniti della finestra utilizzati da un'applicazione del framework creata con la procedura guidata, eseguire l'override della funzione membro virtuale di PreCreateWindow della finestra.PreCreateWindow consente di accedere al processo di creazione in genere gestito internamente dalla classe di CDocTemplate .Il framework chiama PreCreateWindow appena prima di creare la finestra.Modifica della struttura di CREATESTRUCT passata a PreCreateWindow, l'applicazione può modificare gli attributi utilizzati per creare la finestra.Ad esempio, per assicurarsi che una finestra non utilizza una barra del titolo, utilizzare la seguente operazione bit per bit:
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
L'applicazione di esempio In CTRLBARS illustrata questa tecnica per modificare gli attributi della finestra.Secondo cui l'applicazione modifica in PreCreateWindow, può essere necessario chiamare l'implementazione della classe base della funzione.
La discussione seguente vengono descritti il caso SDI e Caso MDI.
Il caso SDI
In un'applicazione (SDI) con interfaccia a documento singolo, lo stile predefinito della finestra nel framework è una combinazione degli stili di FWS_ADDTOTITLE e di WS_OVERLAPPEDWINDOW .FWS_ADDTOTITLE è uno stile MFC-specifico che indica al framework per aggiungere il titolo del documento alla barra del titolo della finestra.Per modificare gli attributi della finestra in un'applicazione SDI, eseguire l'override della funzione di PreCreateWindow nella classe derivata da CFrameWnd (che la procedura guidata per CMainFrame).Di seguito è riportato un 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 riduzione a icona e ingrandita i pulsanti e senza un bordo ridimensionabile.La finestra è inizialmente centrata sullo schermo.
Il caso di MDI
Un poco più lavoro è necessario modificare lo stile della finestra di una finestra figlio in un'applicazione (MDI) con interfaccia a documenti multipli.Per impostazione predefinita, un'applicazione MDI creato con la procedura guidata utilizza la classe predefinita di CMDIChildWnd 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 i riferimenti alla nuova classe.In genere, l'unico riferimento a CMDIChildWnd nella funzione membro di InitInstance dell'applicazione.
Lo stile di finestre predefinito utilizzato in un'applicazione MDI è una combinazione degli stili di WS_CHILD, di WS_OVERLAPPEDWINDOWe di FWS_ADDTOTITLE .Per modificare gli attributi delle finestre figlio di un'applicazione MDI, eseguire l'override della funzione di PreCreateWindow nella classe derivata da CMDIChildWnd.Di seguito è riportato un 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 le finestre figlio MDI senza un pulsante di ingrandimento.