Ändern der Stile eines mit MFC erstellten Fensters
In seiner Version der Funktion WinMain, registriert MFC einige Standardfensterklassen für Sie. Da Sie normalerweise WinMain MFC bearbeiten, gibt diese Funktion Ihnen keine Möglichkeit, die MFC-Standardfensterstile zu ändern. Dieser Artikel wird beschrieben, wie die Formate einer solchen registrierten Fensterklasse in einer vorhandenen Anwendung ändern können.
Ändern von Stilen in eine neue MFC-Anwendung
Wenn Sie Visual C++ 2.0 oder höher verwenden, können Sie die Standardfensterstile im Anwendungs-Assistenten ändern, wenn Sie die Anwendung erstellen. In den die Benutzeroberflächen-Funktionen Seite des Anwendungs-Assistenten, können Sie Stile für das Hauptrahmenfenster und untergeordneten MDI-Fenster ändern. Für jeden Fenstertyp können Sie der Framestärke (oder stark verdünnen) und eines der folgenden Elemente angeben:
Ob das Fenster Steuerelemente, zu minimieren hat zu maximieren.
Ob das Fenster erstmals angezeigt wird minimiert, maximiert oder nicht.
Für Hauptrahmenfenster können Sie auch angeben, ob das Fenster ein Systemmenü hat. Eine untergeordnete MDI-Fenster können Sie angeben, ob das Fenster Splitterbereiche unterstützt.
Ändern von Stilen in einer vorhandenen Anwendung
Wenn Sie Fensterattribute in einer vorhandenen Anwendung ändern, befolgen Sie die Anweisungen im Rest dieses Artikels stattdessen.
Um die Standardfensterattribute zu ändern, die durch eine Framework-Anwendung verwendet wurden erstellt mit dem Anwendungs-Assistenten, überschreiben die virtuelle Memberfunktion PreCreateWindow des Fensters. PreCreateWindow ermöglicht es einer Anwendung, auf den Erstellungsprozess zuzugreifen, der normalerweise intern durch die CDocTemplate-Klasse verwaltet wird. Das Framework ruft PreCreateWindow kurz vor dem Erstellen des Fensters auf. Indem die CREATESTRUCT-Struktur ändern, die an PreCreateWindow übergeben wird, kann die Anwendung die Attribute ändern, die verwendet werden, um das Fenster zu erstellen. Beispielsweise um sicherzustellen, dass ein Fenster keine Beschriftung verwendet, verwenden Sie die folgende bitweise Operation:
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
Die Beispielanwendung CTRLBARS wird diese Technik für das Ändern von Fensterattributen. Je nachdem, was Ihre Anwendung in PreCreateWindow geändert wird, ist möglicherweise notwendig, die Basisklassenimplementierung der Funktion aufzurufen.
In der folgenden Beschreibung werden der SDI-Fall und MDI-Fall.
Der SDI-Fall
In einer Single Document Interface (SDI)- Anwendung ist der Standardfensterstil im Framework eine Kombination aus WS_OVERLAPPEDWINDOW und FWS_ADDTOTITLE Stile. FWS_ADDTOTITLE ist ein MFC-Besondereformat, das das Framework angewiesen wird, um dem Dokumenttitel der Titelleiste des Fensters hinzuzufügen. Um die Fensterattribute in einer SDI-Anwendung zu ändern, überschreiben Sie die PreCreateWindow-Funktion in der Klasse, die von CFrameWnd abgeleitet ist (der Anwendungs-Assistent CMainFrame nennt). Beispiel:
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;
}
Dieser Code stellt ein Hauptrahmenfenster außen minimiert und maximiert Schaltflächen und ohne einen veränderbaren Kontext erstellt. Das Fenster wird auf dem Bildschirm anfänglich zentriert.
Der MDI-Fall
Einigermaßen wird mehr Arbeit erfordert, den Fensterstil eines untergeordneten Fensters in einer MDI (Multiple Document Interface (MDI)- Anwendung zu ändern. Standardmäßig verwendet eine MDI-Anwendung, die mit dem Anwendungs-Assistenten erstellt wird, die Standard CMDIChildWnd-Klasse, die in MFC definiert wird. Um den Fensterstil eines untergeordneten MDI-Fensters zu ändern, müssen Sie eine neue Klasse von CMDIChildWnd ableiten und alle Verweise auf CMDIChildWnd in einem Projekt durch Verweise auf die neue Klasse ersetzen. Höchstwahrscheinlich ist der einzige Verweis auf CMDIChildWnd in der Anwendung in InitInstance-Memberfunktion der Anwendung.
Der Standardfensterstil, der in einer MDI-Anwendung verwendet wird, ist eine Kombination aus der WS_CHILD, WS_OVERLAPPEDWINDOW und FWS_ADDTOTITLE Stile. Um die Fensterattribute der untergeordnete Fenster einer MDI-Anwendung zu ändern, überschreiben Sie die PreCreateWindow-Funktion in der Klasse, die von CMDIChildWnd abgeleitet wird. Beispiel:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// Create a child window without the maximize button
cs.style &= ~WS_MAXIMIZEBOX;
return CMDIChildWnd::PreCreateWindow(cs);
}
Dieser Code stellt untergeordnete MDI-Fenster ohne eine maximierensschaltfläche erstellt.