Vollbild-Anwendung

Bei einigen Anwendungen kann es von Vorteil sein, wenn für den Ausgabebereich der gesamte Bildschirm zur Verfügung steht. Dazu muss vom Rahmenfenster sowohl der Rahmen (einschließlich Titelzeile) sowie das Menü entfernt werden.

Um ein Fenster als Vollbild darzustellen, muss zunächst das Standard-Menü entfernt werden. Dies erfolgt innerhalb der Methode PreCreateWindow(...) des Rahmenfensters in dem das Element hMenu der als Parameter übergebenen Struktur CREATESTRUCT auf NULL gesetzt wird.

Da das Fenster in der Normaldarstellung aber wieder ein Menü besitzen soll, muss das Standard-Menü nun explizit wieder geladen werden. Dazu wird dem Rahmenfenster zuerst ein CMenu Objekt hinzufügt (im Beispiel m_CMenu) und das Standard-Menü dann über dessen Methode LoadMenu(...) geladen. Wie Sie bereits wissen, besitzt das Standard-Menü in der Regel die ID IDR_MAINFRAME. Das so geladene Menü wird dann über die Methode SetMenu(...) des Rahmenfensters wieder mit dem Rahmenfenster verbunden.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;
    // ZU ERLEDIGEN: Ändern Sie hier die Fensterklasse oder ....

    // Menu zuerst entfernen
    cs.hMenu = NULL;

    return TRUE;
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    // Nun Standard-Menu laden
    m_CMenu.LoadMenu(IDR_MAINFRAME);
    // und dem Fenster zuweisen
    SetMenu(&m_CMenu);

    return 0;
}

Damit sind die Vorarbeiten erledigt. Sehen wir uns jetzt an, wie ein Fenster zum Vollbild vergrößert wird. Zuerst muss vom Rahmenfenster der Fenstertitel, der Rahmen und das Systemmenü entfernt werden. Dies erfolgt durch Aufruf der CWnd Methode ModifyStyle(...). Das Systemmenü muss hier auch entfernt werden, da ansonsten 'unkontrolliert' über <ALT>-<SPACE> der Fensterzustand gewechselt werden kann. Als nächstes ist das Menü über den Aufruf der Methode SetMenu(...) zu entfernen, wobei als neues Menu ein NULL-Zeiger übergeben wird. Zum Schluss ist das Rahmenfenster noch mittels ShowWindow(...) zu maximieren.

Um das Fenster wieder auf den 'Normalzustand' zu bringen wird genau umgekehrt vorgegangen, d.h. es wird dem Fenster das ursprüngliche Menü und der Rahmen, die Titelzeile und das Systemmenü hinzugefügt. Anschließend wird das Fenster durch den Aufruf von ShowWindow(...) in seinen normalen Zustand gebracht.

void CMainFrame::ShowFull()
{
    if (!m_bFullScreen)
    {
        ModifyStyle(WS_CAPTION|WS_THICKFRAME|WS_SYSMENU,0);
        SetMenu(NULL);
        ShowWindow(SW_SHOWMAXIMIZED);
        m_bFullScreen = true;
    }
}

void CMainFrame::ShowNormal()
{
    if (m_bFullScreen)
    {
        SetMenu(&m_CMenu);
        ModifyStyle(0,WS_CAPTION|WS_THICKFRAME|WS_SYSMENU);
        ShowWindow(SW_SHOWNORMAL);
        m_bFullScreen = false;
    }
}

Das Beispiel zu diesem Thema finden Sie auch unter 07Ressourcen\FullScreen.

Damit beenden wir die Tipps & Tricks zu den Ressourcen und fahren mit dem normalen Kurs fort.



Copyright © 2004

Senden Sie Emails mit Fragen oder Kommentaren zu dieser Website an: mailto:info@cpp-tutor.de
 Wolfgang Schröder, Lerchenweg 23, D-72805 Lichtenstein. Tel: +49 7129 6470