Links Titel
Pixel
     
Steuerelemente - Bildlaufleisten


Hier stehen Informationen zum Umgang mit Bildlaufleisten (ScrollBar). Die zugehörige Klasse lautet: CScrollBar.


Übersicht

  - Aktuelle Position der Bildlaufleiste ermitteln - GetScrollPos()
  - Beispiel mit der horizontalen Bildlaufleiste
  - Beispiel mit der vertikalen Bildlaufleiste
  - Neue Position in der Bildlaufleiste setzen - SetScrollPos()
  - Wertebereich für die Bildlaufleiste festlegen - SetScrollRange()

 

Aktuelle Position der Bildlaufleiste ermitteln - GetScrollPos()

Mit Hilfe der Funktion GetScrollPos() kann man den aktuellen Wert der Bildlaufleiste herausfinden. Man bekommt ihn als ganzzahligen Wert von der Funktion zurück. Das geht so:

  // Mit einer Variablen vom Typ CSrollBar
  m_ctlScrollBar1.GetScrollPos()

  // Mit einem Zeiger
  pScrollBar1->GetScrollPos()


Ein Beispiel dazu gibt es hier: Beispiel mit der horizontalen Bildlaufleiste

 

Beispiel mit der horizontalen Bildlaufleiste

Im folgenden Beispiel wird eine Anwendung erstellt, die zeigt wie man mit einer horizontalen Bildlaufleiste umgeht.

Beispiel:
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: H_Bildlaufleiste und entferne alle vorhandenen Elemente. Schau dir die unten stehende Abbildung an, um zu sehen wie die Steuerelemente angeordnet werden
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Beispiel zur Horizontalen Bildlaufleiste
  • Füge ein Textfeld ein und ändere den Titel in: Aktueller Wert:
  • Füge daneben noch ein Textfeld ein, ändere die ID in: IDC_WERT und entferne den Titel
  • Füge eine Horizontale Bildlaufleiste hinzu und behalte die vorgegebene ID (IDC_SCROLLBAR1)
  • Füge eine Nachrichtenbehandlungsroutine für die Nachricht WM_HSCROLL ein
  • Füge folgenden Code in die eben erstellte Funktion ein:
  void CH_BildlaufleisteDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  {
    // Hole aktuelle Position der Laufleiste
    int nAktuellePosition = pScrollBar->GetScrollPos();

    // Speichere die alte Position
    int nNeuePosition = nAktuellePosition;

    // Auswertung der Bildlaufleiste
    switch(nSBCode)
    {
      case SB_LINELEFT:
        nNeuePosition = nAktuellePosition-1;
        break;

      case SB_LINERIGHT:
        nNeuePosition = nAktuellePosition+1;
        break;

      case SB_PAGELEFT:
        nNeuePosition = nAktuellePosition-5;
        break;

      case SB_PAGERIGHT:
        nNeuePosition = nAktuellePosition+5;
        break;

      case SB_THUMBTRACK:
        nNeuePosition = nPos;
        break;

      case SB_THUMBPOSITION:
        nNeuePosition = nPos;
        break;
    }

    // Balken ganz links angekommen? <0 darf nicht sein
    if(nNeuePosition < 0)
      nNeuePosition = 0;

    // Balken ganz rechts angekommen= >50 darf nicht sein
    if(nNeuePosition > 50)
      nNeuePosition = 50;

    // Aktuelle Position an Scrolleiste übermitteln
    pScrollBar->SetScrollPos(nNeuePosition);

    // Wert der Bildlaufleiste im Textfeld anzeigen
    SetDlgItemInt(IDC_WERT, nNeuePosition);
  }
  • Weise jetzt der Bildlaufleiste den Anfangswert 0 und den maximal Wert 50 zu. Füge dazu diesen Code in die Funktion OnInitDialog() ein:
  BOOL CH_BildlaufleisteDlg::OnInitDialog()
  {
    ...
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    CScrollBar *pScrollBar1 = (CScrollBar *)GetDlgItem(IDC_SCROLLBAR1);
    pScrollBar1->SetScrollRange(0,50);

    return(TRUE);
  }


Bildlaufleiste

Beschreibung:
Als erstes wird mit der Funktion SetScrollRange() der Wertebereich für die Bildlaufleiste festgelegt (in OnInitDialog()). Immer wenn in die Bildlaufleiste geklickt wird, wird die Funktion OnHScroll() aufgerufen. In der Funktion OnHScroll() angekommen, wird erstmal der aktuelle Wert der Laufleiste ermittelt und gesichert. Dann wird ausgewertet was der Benutzer mit der Bildlaufleiste gemacht hat:

SB_LINELEFT und SB_LINERIGHT bedeutet das auf die äusseren Pfeile geklickt wurde und bewirkt eine Veränderung um 1.
SB_PAGELEFT UND SB_PAGERIGHT bedeutet, das in die Bildlaufleiste selbst hineingeklickt wurde. Bei einem Text würde das ein Blättern einer Seite bedeuten. Im Beispiel wurde eine Veränderung von 5 gewählt.
SB_THUMBTRACK bedeutet, das der Schieber(Thumb) aktuell bewegt wird.
SB_THUMBPOSITION bedeutet, das der Schieber direkt an eine bestimmte Position bewegt wurde.

Dann wird geprüft, ob die festgelegten Minimal- und Maxwerte nicht überschritten werden. Zum Schluss wird der Schieber mit der Funktion SetScrollPos() an die neue Position gesetzt.


Downloads: H_Bildlaufleiste.exe - Gesamtes Projekt

 

Beispiel mit der vertikalen Bildlaufleiste

Im folgenden Beispiel wird eine Anwendung erstellt, die zeigt wie man mit einer vertikalen Bildlaufleiste umgeht.

Beispiel:
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: V_Bildlaufleiste und entferne alle vorhandenen Elemente. Schau dir die unten stehende Abbildung an, um zu sehen wie die Steuerelemente angeordnet werden
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Beispiel zur Vertikalen Bildlaufleiste
  • Füge noch ein Textfeld ein und ändere den Titel in: Aktueller Wert:
  • Füge noch ein Textfeld ein, ändere die ID in IDC_WERT und entferne den Titel
  • Füge eine Vertikale Bildlaufleiste hinzu und behalte die vorgegebene ID (IDC_SCROLLBAR1)
  • Füge eine Nachrichtenbehandlungsroutine für die Nachricht WM_VSCROLL ein
  • Klicke auf den Button Code bearbeiten und füge folgenden Code in die eben erstellte Funktion ein:
  void CV_BildlaufleisteDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  {
    // Hole aktuelle Position der Laufleiste
    int nAktuellePosition = pScrollBar->GetScrollPos();

    // Speichere die alte Position
    int nNeuePosition = nAktuellePosition;

    // Auswertung der Bildlaufleiste
    switch(nSBCode)
    {
      case SB_LINELEFT:
        nNeuePosition = nAktuellePosition-1;
        break;

      case SB_LINERIGHT:
        nNeuePosition = nAktuellePosition+1;
        break;

      case SB_PAGELEFT:
        nNeuePosition = nAktuellePosition-5;
        break;

      case SB_PAGERIGHT:
        nNeuePosition = nAktuellePosition+5;
        break;

      case SB_THUMBTRACK:
        nNeuePosition = nPos;
        break;

      case SB_THUMBPOSITION:
        nNeuePosition = nPos;
        break;
    }

    // Balken ganz links angekommen? <0 darf nicht sein
    if(nNeuePosition < 0)
      nNeuePosition = 0;

    // Balken ganz rechts angekommen= >50 darf nicht sein
    if(nNeuePosition > 50)
      nNeuePosition = 50;

    // Aktuelle Position an Scrolleiste übermitteln
    pScrollBar->SetScrollPos(nNeuePosition);

    // Wert der Bildlaufleiste im Textfeld anzeigen
    SetDlgItemInt(IDC_WERT, nNeuePosition);
  }
  • Weise jetzt der Bildlaufleiste den Anfangswert 0 und den maximal Wert 50 zu. Füge dazu diesen Code in der OnInitDialog() Funktion ein:
  BOOL CH_BildlaufleisteDlg::OnInitDialog()
  {
    ...
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    CScrollBar *pScrollBar1 = (CScrollBar *)GetDlgItem(IDC_SCROLLBAR1);
    pScrollBar1->SetScrollRange(0,50);

    return(TRUE);
  }


Bildlaufleisten

Beschreibung:
Als erstes wird mit der Funktion SetScrollRange() der Wertebereich für die Bildlaufleiste festgelegt (in OnInitDialog()). Immer wenn in die Bildlaufleiste geklickt wird, wird die Funktion OnVScroll() aufgerufen. In der Funktion OnVcroll() angekommen, wird erstmal der aktuelle Wert der Laufleiste ermittelt und gesichert. Dann wird ausgewertet was der Benutzer mit der Bildlaufleiste gemacht hat:

SB_LINELEFT und SB_LINERIGHT bedeutet das auf die äusseren Pfeile geklickt wurde und bewirkt eine Veränderung um 1.
SB_PAGELEFT UND SB_PAGERIGHT bedeutet, das in die Bildlaufleiste selbst hineingeklickt wurde. Bei einem Text würde das ein Blättern einer Seite bedeuten. Im Beispiel wurde eine Veränderung von 5 gewählt.
SB_THUMBTRACK bedeutet, das der Schieber(Thumb) aktuell bewegt wird.
SB_THUMBPOSITION bedeutet, das der Schieber direkt an eine bestimmte Position bewegt wurde.

Dann wird geprüft, ob die festgelegten Minimal- und Maxwerte nicht überschritten werden. Zum Schluss wird der Schieber mit der Funktion SetScrollPos() an die neue Position gesetzt.


Downloads: V_Bildlaufleiste.exe - Gesamtes Projekt

 

Neue Position in der Bildlaufleiste setzen - SetScrollPos()

Mit Hilfe der Funktion SetScrollPos() kann man den aktuellen Wert in der Bildlaufleiste setzen. Man übergibt ihr einen ganzzahligen Wert. Das geht so:

  // Mit einer Variablen vom Typ CSrollBar
  m_ctlScrollBar1.SetScrollPos(neuerWert)

  // Mit einem Zeiger
  pScrollBar1->SetScrollPos(neuerWert)


Ein Beispiel dazu gibt es hier: Beispiel mit der horizontalen Bildlaufleiste

 

Wertebereich für die Bildlaufleiste festlegen - SetScrollRange()

Mit Hilfe der Funktion SetScrollRange() kann man eine Bildlaufleiste initialisieren. Man übergibt ihr den Startwert und noch den Endwert als ganze Zahl. Übergibt man ihr z.B. die Werte 0,100, dann beginnt die Laufleiste bei 0 und endet bei 100. Das geht so (Code in Funktion OnInitDialog() einfügen):

  // Mit einer Variablen vom Typ CSrollBar
  m_ctlScrollBar1.SetScrollRange(anfang, ende)

  // Mit einem Zeiger
  pScrollBar1->SetScrollRange(anfang, ende)


Ein Beispiel dazu gibt es hier: Beispiel mit der horizontalen Bildlaufleiste

 

Die Vervielfältigung der auf diesen Seiten enthaltenen Informationen und Grafiken ist untersagt, ausgenommen davon ist sämtlicher auf diesen Seiten angezeigter Quellcode. Es wird keinerlei Gewähr für die Richtigkeit und Vollständigkeit der bereitgestellten Informationen übernommen. Haftungsansprüche für Schäden, die durch Nutzung der bereitgestellten Informationen verursacht wurden, sind ausgeschlossen. Für den Inhalt von angegebenen Verweisen wird keine Gewährleistung übernommen.
Copyright © 2005 coding-help.de