Links Titel
Pixel
     
Steuerelemente - Fortschrittsanzeige


Hier stehen Informationen zum Umgang mit der Fortschrittsanzeige (ProgressBar). Die zugehörige Klasse lautet: CProgressCtrl. Eine Fortschrittsanzeige wird meistens benutzt, um den Fortschritt einer länger andauernden Aufgabe darzustellen.


Übersicht

  - Beispiel mit einer Fortschrittsanzeige
  - Farbe der Fortschrittsanzeige ändern
  - Position der Fortschrittsanzeige auslesen - GetPos()
  - Position der Fortschrittsanzeige setzen - SetPos()
  - Wertebereich für die Fortschrittsanzeige festlegen - SetRange()

 

Beispiel mit einer Fortschrittsanzeige

Im folgenden Beispiel wird eine Anwendung erstellt, die zeigen soll wie eine Fortschrittsanzeige grundsätzlich funktioniert. Bei Klick auf den Button simulieren wir eine Berechnung, welche die Fortschrittsanzeige einmal von Anfang bis Ende durchlaufen lässt. Standardmäßig hat die Fortschrittsanzeige einen Wertebereich von 0-100. Wie man diesen Wertebereich ändert kannst du Hier! nachlesen.

Beispiel:
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: ProgressBar und entferne alle vorhandenen Elemente
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Beispiel mit Fortschrittsanzeige
  • Füge eine Fortschrittsanzeige ein und behalte die vorgegebenen ID (IDC_PROGRESS1)
  • Füge eine Member-Variable für die Fortschritssanzeige ein - Kategorie: Control, Variablentyp: CProgressCtrl, Name: m_ctlProgress
  • Füge einen Button ein, behalte die vorgeschlagene ID (IDC_BUTTON1) und ändere den Titel in: Start
  • Klicke doppelt auf den Button um eine Nachrichtenbehandlungsroutine (Funktion) für die Nachricht BN_CLICKED einzufügen und übernehme den vorgeschlagenen Funktionsnamen
  • Füge folgenden Code in die eben erstellte Funktion ein:
  void CProgressBarDlg::OnButton1()
  {
    for(int i=0; i<=100;i++)
    {
      // Führe eine längere Berechung durch
      for(int j=0; j<10000000;j++);

      // Position der Fortschrittsanzeige setzen
      m_ctlProgress.SetPos(i);
    }
  }


ProgressBar


Downloads: ProgressBar.exe - Gesamtes Projekt

 

Farbe der Fortschrittsanzeige ändern

Mit Hilfe der Funktion SendMessage() kann man die Balkenfarbe und die Hintergrundfarbe einer Fortschrittsanzeige ändern.

Beispiel:
Im folgenden Beispiel werden wir bei Klick auf einen Button die Balken- und Hintergrundfarbe einer Fortschrittsanzeige verändern. Die Hintergrundfarbe werden wir weiss färben und die Balkenfarbe grün.
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: ProgressFarbe und entferne alle vorhandenen Elemente
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Farbige Fortschrittsanzeige
  • Füge eine Fortschrittsanzeige ein und behalte die vorgegebenen ID (IDC_PROGRESS1)
  • Füge eine Member-Variable für die Fortschritssanzeige ein - Kategorie: Control, Variablentyp: CProgressCtrl, Name: m_ctlProgress
  • Füge einen Button ein, behalte die vorgeschlagene ID (IDC_BUTTON1) und ändere den Titel in: Farbe ändern
  • Klicke doppelt auf den Button um eine Nachrichtenbehandlungsroutine (Funktion) für die Nachricht BN_CLICKED einzufügen und übernehme den vorgeschlagenen Funktionsnamen
  • Füge folgenden Code in die eben erstellte Funktion ein:
  void CFarbeDlg::OnButton1()
  {
    // Hintergrundfarbe ändern
    m_ctlProgress.SendMessage(PBM_SETBKCOLOR, 0, (LPARAM)RGB(255, 255, 255));

    // Balkenfarbe ändern
    m_ctlProgress.SendMessage(PBM_SETBARCOLOR, 0, (LPARAM)RGB(0, 255, 0));
  }


  • Füge jetzt noch folgenden Code in die Funktion OnInitDialog() ein, um die Anwendung zu initialisieren:
  BOOL CFarbeDlg::OnInitDialog()
  {
    ...
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    // Setze die Fortschrittsanzeige auf den Wert '100'
    m_ctlProgress.SetPos(100);

    return TRUE;
  }


Farbe


Downloads: Farbe.exe - Gesamtes Projekt

 

Position der Fortschrittsanzeige auslesen - GetPos()

Mit der Funktion GetPos() kann man den aktuellen Wert einer Fortschrittsanzeige auslesen.

Beispiel:
Es folgt der Code wie er im Beispiel: Position der Fortschrittsanzeige setzen - SetPos() verwendet wurde. Bei Unklarheiten schaue dir dort das Beispiel an.
Bei Klick auf einen Button wird in einem Meldungsfenster der aktuelle Wert der Fortschrittsanzeige ausgegeben:

    CString str_help;

    // Wert der Fortschritssanzeige auslesen
    int m_nPosition = m_ctlProgress.GetPos();

    // Ausgelesenen Wert in string wandeln und ausgeben
    str_help.Format("%d", m_nPosition);
    MessageBox("Der ausgelesene Wert ist: " + str_help, "Fortschrittsanzeige");

 

Position der Fortschrittsanzeige setzen - SetPos()

Mit Hilfe der Funktion SetPos() kann man den Wert einer Fortschrittsanzeige setzen. SetPos erwartet als Argument ganzzahligen Wert.

Beispiel:
Im folgenden Beispiel werden wir mit Hilfe eines Eingabefelds die Fortschrittsanzeige auf einen beliebigen Wert zwischen 0 und 100 setzen können. Weiter wird es uns möglich sein den aktuellen Wert der Fortschrittsanzeige mit Hilfe der Funktion GetPos() auszulesen.
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: SetPos und entferne alle vorhandenen Elemente. Schau dir die untenstehende Abbildung an, um zu sehen wie die Steuerelemente angeordnet werden.
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Position setzen - SetPos()
  • Füge eine Fortschrittsanzeige ein und behalte die vorgegebene ID (IDC_PROGRESS1)
  • Füge eine Member-Variable für die Fortschritssanzeige ein - Kategorie: Control, Variablentyp: CProgressCtrl, Name: m_ctlProgress
  • Füge ein Eingabefeld und behalte die vorgegebene ID (IDC_EDIT1). Aktiviere in den Eigenschaften die Eigenschaft Nummer, da wir nur Zahleneingaben zulassen wollen
  • Füge zwei Buttons ein, behalte die vorgeschlagene IDs (IDC_BUTTON1, IDC_BUTTON2) und ändere die Titel in: Position setzen(SetPos) und Position auslesen(GetPos)
  • Klicke doppelt auf jeden Button, um für jeden eine Nachrichtenbehandlungsroutine (Funktion) für die BN_CLICKED Nachricht einzufügen und übernehme die vorgeschlagenen Funktionsnamen
  • Füge folgenden Code in die eben erstellten Funktionen ein:
  void CSetPosDlg::OnButton1()
  {
    int nPosition;

    // Eingabefeld auslesen
    nPosition = GetDlgItemInt(IDC_EDIT1);

    // Ausgelesenen Wert in Fortschrittsanzeige setzen
    m_ctlProgress.SetPos(nPosition);
  }

  void CSetPosDlg::OnButton2()
  {
    CString str_help;

    // Wert der Fortschritssanzeige auslesen
    int nPosition = m_ctlProgress.GetPos();

    // Ausgelesenen Wert in string wandeln und ausgeben
    str_help.Format("%d", nPosition);
    MessageBox("Der ausgelesene Wert ist: " + str_help, "Fortschrittsanzeige");
  }
  • Füge jetzt noch folgenden Code in die Funktion OnInitDialog() ein, um die Anwendung zu initialisieren:
  BOOL CSetPosDlg::OnInitDialog()
  {
    ...
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    // Setze die Fortschrittsanzeige auf den Wert '50'
    m_ctlProgress.SetPos(50);

    // Setze das Eingabefeld auf den Wert '50'
    SetDlgItemInt(IDC_EDIT1, 50);

    return TRUE;
  }


SetPos


Downloads: SetPos.exe - Gesamtes Projekt

 

Wertebereich für die Fortschrittsanzeige festlegen - SetRange()

Mit Hilfe der Funktion SetRange() kann man den Wertebereich für die Fortschrittsanzeige ändern. Das erste zu übergebene Argument ist der Startwert (ganze Zahl) und das zweite Argument der Endwert (ganze Zahl). Übergibt man z.B. die Werte 0, 200, dann beginnt die Fortschrittsanzeige bei 0 und endet bei 200. Auch negative Zahlen sind möglich.

Beispiel:
Wir werden jetzt eine Anwendung erstellen, in der wir den Wertebereich für die Fortschrittsanzeige einstellen können. Wir begrenzen die Eingabe auf Werte zwischen: 0 und 200. Desweiteren werden wir noch eine Möglichkeit einfügen die Fortschrittsanzeige im vorher festgelegten Wertebereich neu zu setzen.
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: SetRange und entferne alle vorhandenen Elemente. Schau dir die untenstehende Abbildung an, um zu sehen wie die Steuerelemente angeordnet werden.
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Setzen eines Wertebreichs - SetRange()
  • Füge eine Fortschrittsanzeige ein und behalte die vorgegebene ID (IDC_PROGRESS1)
  • Füge eine Member-Variable für die Fortschritssanzeige ein - Kategorie: Control, Variablentyp: CProgressCtrl, Name: m_ctlProgress
  • Füge nun die restlichen Steuerelemente nach untenstehender Abbildung ein und ändere die IDs wie in folgender Tabelle aufgeführt:


  • Steuerelement Titel ID
    Textfeld Anfangsbereich: IDC_STATIC
    Eingabefeld   IDC_E_ANFANG
    Textfeld Endbereich: IDC_STATIC
    Eingabefeld   IDC_E_ENDE
    Button Übernehmen IDC_B_UEBERNEHMEN
    Textfeld Position setzen: IDC_STATIC
    Eingabefeld   IDC_E_POSITION
    Button Position setzen IDC_B_POSITION

  • Setze die Eigenschaft Nummer in allen Eingabefeldern, da wir nur Zahleneingaben zulassen wollen
  • Füge für jedes Eingabefeld eine Member-Variable hinzu - Kategorie: Wert, Variablentyp: int, Name: m_nAnfang (IDC_E_ANFANG), m_nEnde (IDC_E_ENDE), m_nPosition (IDC_E_POSITION)
  • Klicke doppelt auf beide Buttons, um für jeden eine Nachrichtenbehandlungsroutine (Funktion) für die BN_CLICKED-Nachricht einzufügen. Übernehme die vorgeschlagenen Funktionsnamen
  • Füge folgenden Code in die eben erstellten Funktionen ein:
  void CSetRangeDlg::OnBUebernehmen()
  {
    // Eingabefelder auslesen
    UpdateData(TRUE);

    // Eingaben prüfen
    if(m_nAnfang >= m_nEnde)
    {
      MessageBox("Fehlerhafte Eingabe! Anfangswert >= Endwert");
      return;
    }

    if(m_nEnde > 200)
    {
      MessageBox("Der Endwert ist zu hoch. Er darf nicht > 200 sein");
      return;
    }

    // Wertebereich der Fortschrittsanzeige setzen
    m_ctlProgress.SetRange(m_nAnfang, m_nEnde);
  }

  void CSetRangeDlg::OnBPosition()
  {
    // Eingabefelder auslesen
    UpdateData(TRUE);

    // Eingabe prüfen
    if(m_nPosition < m_nAnfang || m_nPosition > m_nEnde)
    {
      MessageBox("Fehlerhafte Eingabe! Eingegebener Wert ausserhalb des Wertebereichs");
      return;
    }

    // Anzeige auf die Hälfte des Wertebereichs setzen
    m_ctlProgress.SetPos(m_nPosition);
  }
  • Füge jetzt noch folgenden Code in die Funktion OnInitDialog() ein, um die Anwendung zu initialisieren:
  BOOL CSetRangeDlg::OnInitDialog()
  {
    ...
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    // Aktueller Wertebereich in Eingabefelder eintragen
    SetDlgItemInt(IDC_E_ANFANG, 0);
    SetDlgItemInt(IDC_E_ENDE, 100);

    // Fortschrittsanzeige zu Begin halb füllen
    m_ctlProgress.SetPos(50);

    return TRUE;
  }


SetRange


Downloads: SetRange.exe - Gesamtes Projekt

 

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