|
|
|
|
|
| Steuerelemente - Kontrollkästchen |
Hier stehen Informationen zum Umgang mit den Kontrollkästchen (Checkbox). Sie werden verwendet, wenn eine oder mehrere Optionen ausgewählt werden dürfen. Die zugehörige Klasse lautet: CButton.
- Eigene Kontrollkästchen einfügen
- Kontrollkästchen beim Programmstart initialisieren
- Kontrollkästchen markieren - SetCheck()
- Schriftart für ein Kontrollkästchen ändern - SetFont()
- Zustand eines Kontrollkästchens abfragen - GetCheck()
Um mal die Standard Kontrollkästchen etwas zu veschönern, zeige ich hier wie man eigene, grafische Kontrollkästchen in seine Anwendung einfügen kann.
Beispiel:
Die im folgenden Beispiel verwendeten Kontrollkästchen sind Grafiken im .bmp- Format, ein Bitmap für ein aktiviertes Kontrollkästchen und eins für das nicht aktivierte Kontrollkästchen. Somit werden gar keine "echten" Kontrollkästchen, sondern Bitmaps verwendet. Die Bitmaps werden mit Hilfe des Bild-Elements eingefügt welches auf einen Mausklick reagiert.
- Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen Custom und entferne alle vorhandenen Elemente
- Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Eigene Kontrollkästchen einfügen
- Wähle aus der Steuerelementliste das Bild-Steuerelement, platziere es auf dem Dialog und ändere die ID in: IDC_CUSTOMCHECKBOX. Aktiviere in den Eigenschaften das Attribut: Benachrichtigen (Notify)
- Lade dir die verwendeten Bilder aus dem Beispiel Hier! runter (auch unter Downloads) oder erstelle dir eigene Bitmaps. Importiere die zwei Bilder für die Kontrollkästchen im .bmp-Format. Behalte die vorgegebene IDs (IDB_BITMAP1, IDB_BITMAP2)
- Gehe in die Eigenschaften des Bild-Steuerelement und stelle unter Typ (Type): Bitmap und unter Abbild (Image) das importierte Bitmap ein (IDB_BITMAP1)
- Füge für das Kontrollkästchen eine Member-Variable ein - Variablenname: m_ctlBild, Kategorie: Control, Variablentyp: CStatic
- Füge für das Kontrollkästchen eine Nachrichtenbehandlungsroutine (Funktion) für die BN_CLICKED-Nachricht ein und übernehme den vorgeschlagenen Funktionsnamen
- Füge folgende Variablen für die Dialogklasse (CCustomDlg) ein:
Variablentyp: int, Variablenname: nMerker, Zugriffstatus: private Variablentyp: CBitmap, Variablenname: m_Bitmap, Zugriffstatus: private
- Füge für die Dialogklasse (CCustomDlg) eine Nachrichtenbehandlungsroutine (Funktion) für die Nachricht WM_CTLCOLOR ein
- Füge folgenden Code in die eben erstellten Funktionen ein:
BOOL CCustomDlg::OnInitDialog()
{
...
// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
// Merker initialisieren
nMerker=0;
return TRUE;
}
HBRUSH CMyCustomDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// TODO: Attribute des Gerätekontexts hier ändern
// Hintergrund einfärben
HBRUSH hbr = CreateSolidBrush(RGB(0, 0, 0));
// Text weiss einfärben
pDC->SetTextColor(RGB(255, 255, 255));
// Texthintergrund transparent machen
pDC->SetBkMode(TRANSPARENT);
// TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll
return hbr;
}
void CMyCustomDlg::OnCustomcheckbox()
{
if(nMerker == 0)
{
// Gespeichertes Bild aus Variable löschen
m_Bitmap.DeleteObject();
// Variable neues Bild zuweisen
m_Bitmap.LoadBitmap(IDB_BITMAP2);
// Dem Bild-Element das geladene Bild zuweisen
m_ctlBild.SetBitmap(m_Bitmap);
// Merker setzen
nMerker=1;
}
else if(nMerker == 1)
{
// Gespeichertes Bild aus Variable löschen
m_Bitmap.DeleteObject();
// Variable neues Bild zuweisen
m_Bitmap.LoadBitmap(IDB_BITMAP1);
// Dem Bild-Element das geladene Bild zuweisen
m_ctlBild.SetBitmap(m_Bitmap);
// Merker setzen
nMerker=0;
}
}
 |
 |
Beschreibung:
Als erstes initialisieren wir den Merker in der OnInitDialog()-Funktion. Dann färben wir in der OnCtlColor()-Funktion den Dialoghintergrund schwarz und den Text der Überschrift weiss ein. Dazu setzen wir den Hintegrund der Überschrift transparent, weil es schöner aussieht. In der Funktion OnCustomcheckbox() fragen wir den Zustand der Checkbox mit Hilfe des Merkers ab und fügen das richtige Bild in das Bild-Steuerelement ein. Damit haben wir uns ein grafisch ansprechendes Kontrollkästchen erstellt.
Downloads: Custom.exe - Gesamtes Projekt - Bitmaps aus dem Beispiel
Soll das Kontrollkästchen schon beim Start der Anwendung aktiviert sein, dann braucht man nur die Funktion SetCheck() in der OnInitDialog() Funktion aufzurufen. Hat man eine Control-Variable für das Kontrollkästchen erstellt, dann kann man diesen Code verwenden:
BOOL CCheck1Dlg::OnInitDialog()
{
...
// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
// Checkbox aktivieren
m_ctlCheckBox1.SetCheck(1);
return TRUE;
}
Will man keine Control-Variable erstellen, kann man auch einen Zeiger verwenden und das geht das so:
BOOL CCheck1Dlg::OnInitDialog()
{
...
// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
// Zeiger vom Typ CButton erstellen
CButton *z_Checkbox;
// Zeiger der Checkbox zuweisen
z_Checkbox=(CButton *)GetDlgItem(ID_DER_CHECKBOX);
// Checkbox aktivieren
z_Checkbox->SetCheck(1);
return TRUE;
}
Siehe dazu auch das Beispiel: Kontrollkästchen markieren - SetCheck()
Mit der Funktion SetCheck() kann man ein Kontrollkästchen markieren bzw. nicht markieren. Übergibt man der Funktion den Wert: 1, dann aktiviert man das Kontrollkästchen. Übergibt man den Wert: 0, so hebt man die Markierung wieder auf.
Beispiel:
Im folgenden Beispiel wird auf Klick des Buttons, der Zustand eines Kontrollkästchen abgefragt. Ist es markiert, wird die Markierung aufgehoben, ist es nicht markiert, wird die Markierung gesetzt.
- Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen SetCheck und entferne alle vorhandenen Elemente
- Füge ein Textfeld für die Überschrift ein und ändere den Titel in: Kontrollkästchen markieren - SetCheck()
- Füge ein Kontrollkästchen in die eben erstellte Anwendung ein und behalte die vorgegebene ID (IDC_CHECK1)
- Füge einen Button ein, behalte die vorgegebene ID und ändere den Titel in: Aktivieren/Deaktivieren
- Füge eine Member-Variable für das Kontrollkästchen ein - Kategorie: Control, Variablentyp: CButton, Name: m_ctlCheckBox1
- Klicke doppelt auf den Button, um eine Nachrichtenbehandlungsroutine (Funktion) für die BN_CLICKED-Nachricht zu erstellen und übernehme den vorgeschlagenen Funktionsamen
- Füge folgenden Code in die eben erstellte Funktion ein:
void CSetCheckDlg::OnButton1()
{
int n_zustand;
// Aktuellen Zustand abfragen
n_zustand = m_ctlCheckBox1.GetCheck();
if(n_zustand==0)
// Checkbox aktivieren
m_ctlCheckBox1.SetCheck(1);
else
// Checkbox deaktivieren
m_ctlCheckBox1.SetCheck(0);
}
- Wenn das Kontrollkästchen direkt beim Programmstart schon markiert sein soll, dann füge noch folgenden Code in die OnInitDialog() Funktion ein:
BOOL CSetCheckDlg::OnInitDialog()
{
...
// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
// Checkbox aktivieren
m_ctlCheckBox1.SetCheck(1);
return TRUE;
}
Downloads: SetCheck.exe - Gesamtes Projekt
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
Mit der Funktion GetCheck() kann man den Zustand einer Checkbox abfragen. Die Funktion gibt einen ganzzahligen Wert zurück. Ist das Kontrollkästchen aktiv gibt die Funktion den Wert 1 zurück, ansonsten 0.
Beispiel
- Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: GetCheck und entferne alle vorhandenen Elemente
- Wähle aus der Steuerelementliste ein Kontrollkästchen und platziere es auf dem Dialog. Behalte die vorgegebene ID IDC_CHECK1
- Füge ein Textfeld ein, ändere die ID in IDC_STATIC1 und den Titel in: Checkbox nicht aktiviert!
- Füge eine Member-Variable für das Kontrollkästchen ein - Kategorie: Control, Variablentyp: CButton, Name: m_ctlCheckBox1.
- Füge für das Kontrollkästchen eine Nachrichtenbehandlungsroutine (Funktion) für die BN_CLICKED-Nachricht ein und übernehme den vorgeschlagenen Funktionsnamen
- Füge folgenden Code in die eben erstellte Funktion ein:
void CGetCheckDlg::OnCheck1()
{
int n_Status_Checkbox;
// Zustand der Checkbox abfragen
n_Status_Checkbox=m_ctlCheckBox1.GetCheck();
// Checkbox aktiviert?
if(n_Status_Checkbox==1)
SetDlgItemText(IDC_STATIC1, "Checkbox ist aktiviert!");
else
SetDlgItemText(IDC_STATIC1, "Checkbox nicht aktiviert!");
}
Downloads: GetCheck.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 | |