Links Titel
Pixel
     
Steuerelemente - Buttons


Hier stehen Informationen zum Umgang mit Buttons. Die zugehörige Klasse lautet: CButton.


Übersicht

  - Beschriftung während der Laufzeit ändern - SetWindowText()
  - Bitmap als Beschriftung verwenden - SetBitmap()
  - BitmapButtons einfügen
  - Icon als Beschriftung verwenden - SetIcon()
  - MouseOver-Buttons einfügen
  - Schriftart in einem Button ändern - SetFont()

 

Beschriftung während der Laufzeit ändern - SetWindowText()

Mit Hilfe der Funktion SetWindowText() kann man den angezeigten Text eines Buttons während der Laufzeit ändern. Die Funktion besitzt einen Parameter - einen String der den neuen Text für den Button enthält.

Beispiel:
Im folgenden Beispiel wird eine kleine Anwendung erstellt, die den Text des Buttons ändert, sowie man ihn anklickt.

  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: B_Beschriftung und entferne alle vorhandenen Elemente
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Beschriftung während der Laufzeit ändern - SetWindowText()
  • Füge einen Button ein, vergrössere ihn etwas und behalte die vorgegebene ID (IDC_BUTTON1). Ändere den Titel in: Text
  • Füge eine Member-Variable für den Button ein - Kategorie: Control, Variablentyp: CButton, Name: m_ctlButton1
  • 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 CB_BeschriftungDlg::OnButton1()
  {
    m_ctlButton1.SetWindowText("Geänderter Text");
  }


Beschriftung


Downloads: B_Beschriftung.exe - Gesamtes Projekt

 

Bitmap als Beschriftung verwenden - SetBitmap()

Das folgende Beispiel zeigt, wie man auf einem Button anstelle von normalem Text ein Bitmap anzeigen kann. Dabei hilft die Funktion SetBitmap().

Beispiel:
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: B_Bitmap und entferne alle vorhandenen Elemente
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Buttons mit Bitmap
  • Füge ein Button ein, behalte die vorgegebene ID (IDC_BUTTON1) und vergrössere ihn etwas, damit er das Bild komplett aufnehmen kann
  • Aktiviere in den Eigenschaften die Eigenschaft: Bitmap
  • Füge eine Member-Variable für den Button ein - Kategorie: Control, Variablentyp: CButton, Name: m_ctlButton1
  • Füge eine Variable für die Dialogklasse (CB_BitmapDlg) ein - Variablentyp: CBitmap, Variablenname: m_Bitmap, Zugriffstatus: Public
  • Importiere ein Bitmap welches auf dem Button angezeigt werden soll. Falls du keins zur Hand hast, findest du in C:\Windows bestimmt was passendes, oder lade dir hier! das Bild aus dem Beispiel runter
  • Klicke doppelt auf den Button, um eine Nachrichtenbehandlungsroutine für die Nachricht BN_CLICKED einzufügen und übernehme den vorgeschlagenen Funktionsnamen
  • Füge folgenden Code in die eben erstellte Funktion ein:
  void CB_ButtonDlg::OnButton1()
  {
    // evtl bereits in Variable gespeichertes Bild löschen
    m_Bitmap.DeleteObject();

    // Bild in Variable speichern
    m_Bitmap.LoadBitmap(IDB_BITMAP1);

    // Bild auf dem Button anzeigen
    m_ctlButton1.SetBitmap(m_Bitmap);

    // Meldungsfenster ausgeben
    MessageBox("Button mit Bild ", "Info", MB_ICONEXCLAMATION);
  }


Bitmap

Beschreibung:
Erst wird mit DeleteObject() ein evtl vorhandenes Objekt gelöscht. Ohne diese Zeile stürzt das Programm bei erneuten Klick auf den Button ab. Dann wird das Bild der Bitmap-Variablen zugewiesen und mit SetBitmap() auf den Button gepackt.
Will man das Bitmap direkt nach dem Programmstart auf dem Button anzeigen lassen, dann braucht man lediglich den folgenden Code in die Funktion OnInitDialog() eintragen:

  BOOL CB_BitmapDlg::OnInitDialog()
  {
    ....
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    // Bild in Variable speichern
    m_Bitmap.LoadBitmap(IDB_BITMAP1);

    // Bild auf dem Button anzeigen
    m_ctlButton1.SetBitmap(m_Bitmap);

    return TRUE;
  }


Downloads: B_Bitmap.exe - Gesamtes Projekt - Bitmap aus dem Beispiel

 

BitmapButtons einfügen

BitmapButtons unterscheiden sich von Buttons in denen ein Bitmap eingefügt wurde wesentlich. Man kann damit seinen Button völlig variabel gestalten, runde Buttons, eckige Buttons ganz egal. Ein BitmapButtons kann vier Zustände haben:
  • Zustand X: Ein deaktivierter Button (X = not allowed)
  • Zustand U: Der Ausgangszustand des Buttons, also wenn er nicht gedrückt ist (U = up)
  • Zustand F: Button hat den Focus, ist aber nicht gedrückt (F = Focus)
  • Zustand D: Der Button hat den Focus und der Benutzer hält gerade die linke Maustaste gerückt (D = Down)
Man fügt also unter Ressourcen die Buttons in Form von .bmp-Dateien der Anwendung hinzu. Die ID muss man genauso vergeben, wie der Titel des Buttons ist, der die eingefügten Bitmaps anzeigen soll. Man muss aber noch den Buchstaben für den Zustand am Ende der ID anhängen und die ID in Anführungszeichen setzen. Für unser Beispiel sieht das so aus:

BitmapButtons

Ausserdem wird eine Variable vom Typ: CBitmapButton benötigt. Dieser Variablen weisen wir dann den Button zu auf dem die eingefügten Bitmaps abgebildet werden sollen.

Beispiel:
Wir werden jetzt eine Anwendung erstellen, in der wir einen BitmapButton einfügen. Wir werden aber nur drei Zustände einfügen, den Zustand wenn der Button den Focus hat, lassen wir weg. Wir benötigen also drei Zustände des Buttons in Form von .bmp-Dateien. Wenn du meine verwenden möchtest, kannst du sie dir HIER! oder am Ende des Beispiels runterladen.
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: BitmapButtons und entferne alle vorhandenen Elemente
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Bitmap - Buttons
  • Füge ein Button ein und behalte die vorgegebene ID (IDC_BUTTON1) sowie den Titel (Button1). Aktiviere Besitzerzeichnung (OwnerDraw) in den Eigenschaften des Buttons
  • Füge ein Kontrollkästchen ein, ändere den Titel in: Button aktivieren/deaktivieren und behalte die ID (IDC_CHECK1)
  • Füge eine Member-Variable für das Kontrollkästchen ein - Kategorie: Wert, Variablentyp: BOOL, Name: m_bCheck
  • Importiere nun die Bitmaps für die Buttons ein. Es werden Bitmaps mit drei verschiedenen Zustände benötigt und sie müssen das .bmp-Format haben. Nenne die IDs genauso wie der Titel des Buttons lautet und hänge die Buchstaben für die Zustände ran. Vergiss nicht die IDs in Anführungszeichen zu setzen: "BUTTON1D", "BUTTON1U", "BUTTON1X"
  • Füge eine Variable für die Dialogklasse (CBitmapButtonDlg) ein - Variablentyp: CBitmapButton, Variablenname: m_BitmapButton, Zugriffstatus: Public
  • Klicke doppelt auf das Kontrollkästchen, um eine Nachrichtenbehandlungsroutine für die BN_CLICKED-Nachricht einzufügen. Übernehme den vorgeschlagenen Funktionsnamen
  • Klicke doppelt auf den Button, um eine Nachrichtenbehandlungsroutine für die BN_CLICKED-Nachricht einzufügen. Übernehme den vorgeschlagenen Funktionsnamen
  • Füge folgenden Code in die eben erstellten Funktionen und in die Funktion OnInitDialog() ein:
  BOOL CBitmapButtonDlg::OnInitDialog()
  {
    ....
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    // Der CBitmapButton Variable den Button und damit die Bitmaps zuweisen
    m_BitmapButton.AutoLoad(IDC_BUTTON1, this);

    // Kontrollkästchen initialisiseren
    m_bCheck = FALSE;

    return TRUE;
  }

  void CBitmapButtonDlg::OnCheck1()
  {
    // In dieser Funktion wird der Button deaktiviert bzw aktiviert
    if(m_bCheck == FALSE)
    {
      m_BitmapButton.EnableWindow(FALSE);
      m_bCheck = TRUE;
    }
    else
    {
      m_BitmapButton.EnableWindow(TRUE);
      m_bCheck = FALSE;
    }
  }

  void CBitmapButtonDlg::OnButton1()
  {
    MessageBox("Der Button wurde angeklickt!");
  }


BitmapButtons


Downloads: BitmapButton.exe - Gesamtes Projekt - Bitmaps aus dem Beispiel

 

Icon als Beschriftung verwenden - SetIcon()

Im folgenden Beispiel wird eine kleine Anwendung erstellt, die ein Icon auf einem Button anzeigt, sobald man ihn anklickt. Erst wird das Icon der Variablen zugewiesen und dann mit Hilfe der Funktion SetIcon() auf den Button gepackt. Als Icon werden wir das Programmicon verwenden (IDR_MAINFRAME).

Beispiel:
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: B_Icon und entferne alle vorhandenen Elemente
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Buttons mit Icon
  • Füge ein Button ein und behalte die vorgegebene ID (IDC_BUTTON1)
  • Füge eine Member-Variable für den Button ein - Kategorie: Control, Variablentyp: CButton, Name: m_ctlButton1
  • Füge eine Variable in die Dialogklasse (CB_IconDlg) ein - Variablentyp: HICON, Variablenname: m_Icon, Zugriffstatus: Public
  • Gehe in die Eigenschaften des Buttons und aktiviere die Eigenschaft: Symbol (Icon)
  • 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 CB_IconDlg::OnButton1()
  {
    // Icon in Variable sichern
    m_Icon = AfxGetApp()->LoadIcon( IDR_MAINFRAME );

    // Icon auf dem Button anzeigen
    m_ctlButton1.SetIcon( m_Icon );

    // Meldungsfenster ausgeben
    MessageBox("Button mit Icon ", "Info", MB_ICONEXCLAMATION);
  }


Icons


Nach einem Klick auf den Button erscheint das Icon. Will man das Icon direkt nach dem Programmstart auf dem Button anzeigen lassen, dann braucht man lediglich den gleichen Code in die Funktion OnInitDialog() eintragen:

  BOOL CB_IconDlg::OnInitDialog()
  {
    ....
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    // Icon in Variable sichern
    m_Icon = AfxGetApp()->LoadIcon( IDR_MAINFRAME );

    // Icon auf dem Button anzeigen
    m_ctlButton1.SetIcon( m_Icon );

    return TRUE;
  }



Downloads: B_Icon.exe - Gesamtes Projekt

 

MouseOver-Buttons einfügen

Im folgenden Beispiel werden wir MouseOver-Buttons in eine Anwendung einfügen. Eigentlich sind das gar keine richtigen Buttons, sondern wir verwenden ein Picture-Steuerelement und wechseln dies mit einem anderen aus, sobald die Maus darüber fährt. So entsteht der Effekt eines MouseOver-Buttons.

Beispiel:
  • Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: MouseOver und entferne alle vorhandenen Elemente
  • Füge ein Textfeld für die Überschrift ein und ändere den Titel in: MouseOver-Buttons
  • Importiere zwei Buttons im .bmp-Format in deine Anwendung. Sie stellen den MouseOver-Effekt dar, müssen also unterschiedlich sein. Lade dir z.B die Buttons aus dem Beispiel hier runter oder wähle eigene Buttons im .bmp-Format. Behalte die vorgegebene IDs (IDB_BITMAP1, IDB_BITMAP2)
  • Füge ein Bild-Steuerelement (Picture-Element) ein und ändere die ID in: IDC_STATIC1. In den Eigenschaften des Bild-Steuerelement stelle die Eigenschaft Typ auf: Bitmap und wähle als Abbild (Image) das erste Bitmap, also IDB_BITMAP1. Aktiviere jetzt noch Benachrichtigen (Notify)
  • Füge eine Member-Variable für das Bild-Element ein - Kategorie: Control, Variablentyp: CStatic, Name: m_ctlMouseOver
  • Füge zwei Variablen für die Dialogklasse (CMouseOverDlg) ein - Variablentyp: CBitmap, Variablennamen: m_Bitmap1 und m_Bitmap2, Zugriffstatus: Public
  • Füge eine Nachrichtenbehandlungsroutine (Funktion) für die Nachricht PreTranslateMessage ein
  • Füge folgenden Code in die die eben erstellten Funktion und OnInitDialog() ein:
  BOOL CMouseOverDlg::OnInitDialog()
  {
    ...
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    m_Bitmap1.LoadBitmap(IDB_BITMAP1);
    m_Bitmap2.LoadBitmap(IDB_BITMAP2);

    return TRUE;
  }

  BOOL CMouseOverDlg::PreTranslateMessage(MSG* pMsg)
  {
    // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    if(pMsg->message == WM_MOUSEMOVE)
    {
      // Befindet sich der Mauszeiger über dem Bild?
      if(pMsg->hwnd == GetDlgItem(IDC_STATIC1)->m_hWnd)
        m_ctlMouseOver.SetBitmap(m_Bitmap2);

      else if(pMsg->hwnd != GetDlgItem(IDC_STATIC1)->m_hWnd)
        m_ctlMouseOver.SetBitmap(m_Bitmap1);
    }
    return CDialog::PreTranslateMessage(pMsg);
  }
  • Klicke doppelt auf das Bild-Element, um dafür eine Funktion für die BN_CLICKED Nachricht einzufügen und übernehme den vorgeschlagenen Funktionsnamen (OnStatic1)
  • Füge folgenden Code in die eben erstellte Funktion ein:
  void CMouseOverDlg::OnStatic1()
  {
    MessageBox("Der Button wurde angeklickt!");
  }


MouseOver


Downloads: MouseOver.exe - Gesamtes Projekt - Bitmaps aus dem Beispiel

 

Schriftart in einem Button ändern - SetFont()

Will man in einem Steuerelement eine andere Schriftart als die Standardschrift nutzen, muss man die gewünschte Schriftart mit Hilfe von CreateFont() festlegen und mit der Funktion SetFont() dem Steuerelement zuweisen.

Ein Beispiel wie man die Schriftart für Steuerelemente ändert findest du hier: Schriftart für Steuerelemente ändern

 

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