Die Stile eines Fensters geändert wird von MFC
In seiner Version der WinMain-Funktion registriert fensterklassen MFC einige Standardwert.Da Sie normalerweise keine WinMain MFC bearbeiten, gibt diese Funktion keine Möglichkeit, die Sie fensterstile MFC-Standard zu ändern.In diesem Artikel wird beschrieben, wie Sie die Formate für eine solche vorab registrierener Fensterklasse in einer vorhandenen Anwendung ändern können.
Ändern von Formaten in einer neuen MFC-Anwendung
Wenn Sie Visual C++ 2.0 oder höher verwenden, können Sie die standardmäßige Fensterstile im Anwendungs-Assistenten ändern, wenn Sie die Anwendung erstellen.In der Benutzeroberflächen-Funktionen Seite des Anwendungs-Assistenten können Sie Stile für das Hauptrahmenfenster und untergeordneten MDI-Fenster ändern.Bei jedem Fenstertyp können Sie dessen Frames stärke (stark oder verdünnen) sowie beliebige der folgenden Optionen angeben:
Ob das Fenster, Steuerelemente zu minimieren oder maximiert wird.
Ob das Fenster minimiert oder maximiert, erscheint zuerst Keine.
Für das Hauptrahmenfenster können Sie auch angeben, ob das Fenster ein Systemmenü verfügt.Für untergeordnete MDI-Fenster können Sie angeben, ob das Fenster Splitter Bereiche unterstützt.
Stile in einer vorhandenen Anwendung ändern
Wenn Sie Attribute in einer vorhandenen Anwendung ändern, befolgen Sie die Anweisungen im Rest dieses Artikels.
Um die Standardfenster von Attributen zu ändern, die von einer Framework-Anwendung mit dem Anwendungs-Assistenten erstellten verwendet werden, überschreiben Sie die PreCreateWindow virtuelle Memberfunktion des Fensters.PreCreateWindow ermöglicht es einer Anwendung, den Erstellungsprozess zuzugreifen, der normalerweise intern von der CDocTemplate-Klasse verwaltet wird.Das Framework ruft PreCreateWindow nur vor dem Erstellen des Fensters angezeigt.Mit der CREATESTRUCT-Struktur ändert sich, die PreCreateWindow übergeben wird, kann die Anwendung die Attribute ändern, die verwendet werden, um das Fenster zu erstellen.Beispiel: Um sicherzustellen, dass ein Fenster keine Beschriftung verwendet wird, verwenden Sie die folgende bitweise Operation:
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
Die CTRLBARS Beispielanwendung zeigt diese Technik zum Ändern von Windows attributen.Je nachdem, was die Anwendung in PreCreateWindow ändert, kann es notwendig, die Basisklassenimplementierung der Funktion aufzurufen.
Die folgende Diskussion deckt den SDI-Fall und MDI-Fall ab.
Der SDI-Fall
In einer Anwendung des SDI (Single Document Interface) ist der Fensterstil im Framework eine Kombination der Formate FWS_ADDTOTITLE und WS_OVERLAPPEDWINDOW.FWS_ADDTOTITLE ist ein MFC-Besondere Format, das vom Framework anweist, den Namen der Beschriftung des Fensters Dokumente hinzuzufügen.Um die Fenster von Attributen in einer SDI-Anwendung zu ändern, überschreiben Sie die PreCreateWindow-Funktion in Ihrer Klasse, die von CFrameWnd abgeleitet wurde (die die Anwendungs-Assistenten-Namen CMainFrame).Beispiele:
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;
}
Mit diesem Code wird ein Hauptrahmenfenster außen Schaltflächen Minimieren und Maximieren und ohne einen veränderbaren Kontext erstellt.Das Fenster wird zuerst auf dem Bildschirm zentriert.
Der MDI-Fall
Ein wenig mehr Arbeit ist erforderlich, um den Fensterstil eines untergeordneten Fensters in einer MDI-Anwendung (Multiple Document Interface) ändern.Standardmäßig wird eine MDI-Anwendung, die mit dem Anwendungs-Assistenten erstellt wurde, die standardmäßige CMDIChildWnd-Klasse, die in MFC definiert ist.Um den Fensterstil eines untergeordneten MDI-Fensters zu ändern, müssen Sie eine neue Klasse von CMDIChildWnd ableiten und alle Verweise auf CMDIChildWnd im Projekt durch Verweise auf die neue Klasse ersetzen.Höchstwahrscheinlich ist der einzige Verweis auf CMDIChildWnd in der Anwendung in InitInstance-Memberfunktion der Anwendung lokalisiert.
Der standardmäßige Fensterstil, der in einer MDI-Anwendung verwendet wird, ist eine Kombination der Formate FWS_ADDTOTITLE und WS_OVERLAPPEDWINDOW, WS_CHILD.Um die Fenster von Attributen die untergeordneten Fenster einer MDI-Anwendung zu ändern, überschreiben Sie die PreCreateWindow-Funktion in Ihrer Klasse, die von CMDIChildWnd abgeleitet ist.Beispiele:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// Create a child window without the maximize button
cs.style &= ~WS_MAXIMIZEBOX;
return CMDIChildWnd::PreCreateWindow(cs);
}
Durch diesen Code werden untergeordnete MDI-Fenster ohne die Schaltfläche Maximieren.