Ä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 WinMainnicht 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 PreCreateWindowSTRUKTUR 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 PreCreateWindowsich 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 CMDIChildWndKlasse. 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.

Was möchten Sie mehr über

Siehe auch

Rahmenfensterarten