|
Wenn eine Applikation über einen Menüpunkt das Anzeigen oder Verstecken der Statuszeile steuern will, wobei gleichzeitig auch die Höhe des Fensters der Applikation korrespondierend geändert und deren alter Wert gespeichert wird, so löst man dies am besten über einen entsprechenden Handler, der die Anzeige und das Anpassen der Fensterhöhe leistet.
Die nachfolgende Funktion OnViewStatusBar() implementiert eine Behandlungsmethode für den Menüpunkt, der das Anzeigen und Verstecken durch Umkehren des aktuellen Zustands steuert. Die Höhe des sichtbaren Fensterbereichs wird ebenfalls berücksichtigt.
Im ersten Schritt beschafft sich die Methode einen Zeiger auf die Statuszeile.
void CMainFrame::OnViewStatusBar()
{
CControlBar* pBar = GetControlBar(AFX_IDW_STATUS_BAR);
Sofern eine Statuszeile vorhanden ist, wird als Nächstes die Höhe des Fensters sowie die Höhe der Statuszeile ermittelt.
if (pBar != NULL)
{
RECT AppWinRect, BarRect;
GetWindowRect(&AppWinRect);
pBar->GetWindowRect(&BarRect);
int iBarHeight = BarRect.bottom - BarRect.top;
Danach lässt sich der aktuelle Zustand über die Sichtbarkeit bestimmen und in der Variable bShow invertiert speichern.
BOOL bShow = (pBar->GetStyle() & WS_VISIBLE) == 0;
Mit dem nächsten Aufruf wird dann die Sichtbarkeit der Statuszeile umgekehrt.
ShowControlBar(pBar, bShow, FALSE);
Abhängig von bShow wird die Fensterhöhe für TRUE um die Höhe der Statuszeile inkrementiert ...
if (bShow)
{
SetWindowPos(&CWnd::wndNoTopMost,
AppWinRect.top, AppWinRect.left,
AppWinRect.right-AppWinRect.left,
AppWinRect.bottom-AppWinRect.top+iBarHeight,
SWP_NOMOVE);
}
... bzw. für FALSE dekrementiert.
else
{
SetWindowPos(&CWnd::wndNoTopMost,
AppWinRect.top, AppWinRect.left,
AppWinRect.right-AppWinRect.left,
AppWinRect.bottom-AppWinRect.top-iBarHeight,
SWP_NOMOVE);
}
}
}
Der Code lässt sich so direkt in eigene Anwendungen einbinden.
|