Modifica degli stili di una finestra creata da MFC
Nella versione della funzione di WinMain, MFC registra diverse classi di finestre standard automaticamente. Poiché in genere non si modifica WinMaindi MFC, consente di tale funzione non è possibile 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 creazione guidata applicazione 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 determinarne il peso del frame (spesso o assottigliarsi) e i controlli seguenti:
Se la finestra può ridurre o ingrandire i controlli.
Se la finestra appare inizialmente ridotta, ingrandita, o nessuno.
Per le finestre principali, è anche possibile specificare se la finestra dispone di un menu di sistema. Per le finestre figlio MDI, è possibile specificare se una finestra supporta i riquadri splitter.
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.
Per modificare gli attributi di finestra predefiniti utilizzati da un'applicazione del framework creata con la procedura guidata, eseguire l'override della funzione membro virtuale di PreCreateWindow della finestra. PreCreateWindow consente a un'applicazione 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 la 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 di 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 viene analizzato il caso SDI e Caso MDI.
Il caso SDI
In un'applicazione interface (SDI) 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 specifico MFC che indica al framework per aggiungere il titolo del documento sulla 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 creazione guidata applicazione nome 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 icona e ingrandisci pulsanti e senza un bordo ridimensionabile. La finestra inizialmente è centrata sullo schermo.
Il caso MDI
Un poco più lavoro è necessario per modificare lo stile della finestra di una finestra figlio in un'applicazione di multiple-document interface (MDI). Per impostazione predefinita, un'applicazione MDI creato con la creazione guidata applicazione utilizza la classe di CMDIChildWnd di impostazione 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 i riferimenti alla nuova classe. In genere, l'unico riferimento a CMDIChildWnd nell'applicazione si trova 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_OVERLAPPEDWINDOW e 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 il pulsante ingrandisci.