Ändern der Stile eines mit MFC erstellten Fensters
In der Version der WinMain
Funktion registriert MFC mehrere Standardfensterklassen für Sie. Da Sie die MFC-Standardfenster WinMain
nicht normalerweise bearbeiten, bietet ihnen diese Funktion keine Möglichkeit, die MFC-Standardfensterformatvorlagen zu ändern. In diesem Artikel wird erläutert, wie Sie die Formatvorlagen einer solchen vordefinierten Fensterklasse in einer vorhandenen Anwendung ändern können.
Ändern von Formatvorlagen in einer neuen MFC-Anwendung
Wenn Sie Visual C++ 2.0 oder höher verwenden, können Sie die Standardfensterformatvorlagen im Anwendungs-Assistenten ändern, wenn Sie Ihre Anwendung erstellen. Auf der Seite "Benutzeroberflächenfeatures" des Anwendungs-Assistenten können Sie Formatvorlagen für ihr Standard Rahmenfenster und untergeordnete MDI-Fenster ändern. Bei beiden Fenstertypen können Sie die Rahmenstärke (dick oder dünn) und eine der folgenden Typen angeben:
Gibt an, ob das Fenster die Steuerelemente "Minimieren" oder "Maximieren" aufweist.
Gibt an, ob das Fenster anfänglich minimiert, maximiert oder nicht angezeigt wird.
Für Standard Rahmenfenster können Sie auch angeben, ob das Fenster über ein Systemmenü verfügt. Bei untergeordneten MDI-Fenstern können Sie angeben, ob das Fenster Teilerbereiche unterstützt.
Ändern von Formatvorlagen in einer vorhandenen Anwendung
Wenn Sie Fensterattribute in einer vorhandenen Anwendung ändern, folgen Sie stattdessen den Anweisungen im restlichen Artikel.
Um die standardfensterattribute zu ändern, die von einer Frameworkanwendung verwendet werden, die mit dem Anwendungs-Assistenten erstellt wurde, überschreiben Sie die virtuelle Memberfunktion des Fensters "PreCreateWindow ". PreCreateWindow
ermöglicht einer Anwendung den Zugriff auf den Erstellungsprozess, der normalerweise intern von der CDocTemplate-Klasse verwaltet wird. Das Framework ruft direkt vor dem Erstellen des Fensters auf PreCreateWindow
. Durch Ändern der an die CREATESTRUCT übergebenen PreCreateWindow
STRUKTUR kann Ihre Anwendung die Attribute ändern, die zum Erstellen des Fensters verwendet werden. Um beispielsweise sicherzustellen, dass ein Fenster keine Untertitel verwendet, verwenden Sie den folgenden bitweisen Vorgang:
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
Die STRGBARS-Beispielanwendung veranschaulicht diese Technik zum Ändern von Fensterattributen. Je nachdem, wo PreCreateWindow
sich Ihre Anwendung ändert, kann es erforderlich sein, die Basisklassenimplementierung der Funktion aufzurufen.
Die folgende Diskussion behandelt den SDI-Fall und den MDI-Fall.
Der SDI-Fall
In einer einzigen Dokumentschnittstellenanwendung (SDI) ist die Standardfensterformatvorlage im Framework eine Kombination aus WS_OVERLAPPEDWINDOW und FWS_ADDTOTITLE Formatvorlagen. FWS_ADDTOTITLE ist eine MFC-spezifische Formatvorlage, die das Framework anweist, den Dokumenttitel dem Untertitel des Fensters hinzuzufügen. Um die Fensterattribute in einer SDI-Anwendung zu ändern, überschreiben Sie die PreCreateWindow
Funktion in Ihrer Klasse, die von der Klasse abgeleitet ist (von CFrameWnd
der der Anwendungs-Assistent benannt wird CMainFrame
). 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 erstellt ein Standard Rahmenfenster ohne Minimieren- und Maximieren-Schaltflächen und ohne zierbaren Rahmen. Das Fenster wird zunächst auf dem Bildschirm zentriert.
Der MDI-Fall
Es ist etwas mehr Arbeit erforderlich, um die Fensterformatvorlage eines untergeordneten Fensters in einer MDI-Anwendung (Multiple Document Interface) zu ändern. Standardmäßig verwendet eine mit dem Anwendungs-Assistenten erstellte MDI-Anwendung die standardmäßige CMDIChildWnd-Klasse, die in MFC definiert ist. Um die Fensterformatvorlage eines untergeordneten MDI-Fensters zu ändern, müssen Sie eine neue Klasse ableiten CMDIChildWnd
und alle Verweise CMDIChildWnd
in Ihrem Projekt durch Verweise auf die neue Klasse ersetzen. Höchstwahrscheinlich befindet sich der einzige Verweis in CMDIChildWnd
der Anwendung in der Memberfunktion Ihrer Anwendung InitInstance
.
Das in einer MDI-Anwendung verwendete Standardfensterstil ist eine Kombination aus WS_CHILD, WS_OVERLAPPEDWINDOW und FWS_ADDTOTITLE Formatvorlagen. Um die Fensterattribute der untergeordneten Fenster einer MDI-Anwendung zu ändern, überschreiben Sie die PreCreateWindow-Funktion in der von der Klasse abgeleiteten CMDIChildWnd
Klasse. Beispiel:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
// Create a child window without the maximize button
cs.style &= ~WS_MAXIMIZEBOX;
return CMDIChildWnd::PreCreateWindow(cs);
}
Dieser Code erstellt untergeordnete MDI-Fenster ohne maximieren-Schaltfläche.