Programmieren mit C++

Visual C++

Oberflächen

Statusbar anzeigen

Wie implementiert man eine Funktion zum Anzeigen und/oder Verstecken der Statuszeile aus dem Menü einer Applikation heraus?

Frage

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.

Lösung





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 03:16:43 von textarchiv.alojado.de