160 likes | 250 Views
Vers. 6: Der Konfigurationsdialog. Quelle: „Spieleprogrammierung mit DirectX und C++“, U. Kaiser und P. Lensing, Galileo Computing (2007). Der Konfigurationsdialog. Array zum Festlegen der Formen. char aktive_formen[anzahl_formen] = { 1,1,1,1,1,1,1, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0,
E N D
Vers. 6: Der Konfigurationsdialog Quelle: „Spieleprogrammierung mit DirectX und C++“, U. Kaiser und P. Lensing, Galileo Computing (2007)
Array zum Festlegen der Formen • char aktive_formen[anzahl_formen] = { 1,1,1,1,1,1,1, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0 }; int anz_aktive_formen = 7;
Definition der Klasse ‚ultris‘ und einer Instanz class ultris { private: public: }; // Erzeugen der Instanz: ultris mein_spiel;
Variablen und Funktionen der Klasse ‚ultris‘ • Daten des Spiels werden eingefügt: class ultris { private: int vorbelegung; // Anzahl der bei Spielbeginn vorzubelegenden Zeilen int vorschau; // Anzahl der Formen in der Vorschau public: ultris(){ vorbelegung = 0; vorschau = 1;} int get_vorbelegung() { return vorbelegung;} void set_vorbelegung( int v) {if( v < 0) v = 0; if( v > 20) v = 20; vorbelegung = v;} int get_vorschau() { return vorschau;} void set_vorschau( int v) {if( v < 0) v = 0; if(v > 5) v = 5; vorschau = v;} };
Die Funktionen der Klasse ‚ultris‘ • Der Konstruktor erzeugt Initialwerte: ultris(){ vorbelegung = 0; vorschau = 1;} • Die Get-Funktion liest die Grundeinstellungen int get_vorbelegung() { return vorbelegung;} int get_vorschau() { return vorschau;} • Die Set-Funktion ändert die Einstellungen void set_vorschau( int v) {if( v < 0) v = 0; if(v > 5) v = 5; vorschau = v;} void set_vorbelegung( int v) {if( v < 0) v = 0; if( v > 20) v = 20; vorbelegung = v;}
Identifier des Dialogs IDD_KONFIGURATION 125 IDC_STANDARD IDC_LOESCHEN IDC_VORBELEGUNG IDC_VORSCHAU IDC_CHECK1 5000 … IDC_CHECK355034
Implementierung der Funktionen LRESULT CALLBACK ultris_windowhandler ( HWNDhWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) case WM_COMMAND: switch( LOWORD( wParam)) { … case ID_EINSTELLUNGEN_KONFIGURATION: DialogBox ( ultris_instance, MAKEINTRESOURCE( IDD_KONFIGURATION), ultris_window, konfigurationsdialog); return 0; ...
Fallunterscheidungen des Dialoghandlers BOOL CALLBACK konfigurationsdialog (..) { switch (uMsg) { case WM_INITDIALOG: … case WM_COMMAND: … } … Return FALSE; }
Die Funktionen der Checkboxen und der Eingabefelder BOOL CheckDlgButton(HWND hDlg, int nIDButton, UINT uCheck) Handle ID Häckchen gesetzt? BOOL SetDlgItemInt(HWND hDlg, nIDDlgItem, UINT uValue, BOOL bSigned); Handle ID Wert Eingabef.
Die Initialisierung der Checkboxen und der Eingabefelder BOOL CALLBACK konfigurationsdialog (..) { Int i; switch (uMsg) { case WM_INITDIALOG: for( i = 0; i < anzahl_formen; i++) CheckDlgButton( hwndDlg, 5000+i, aktive_formen[i] ? BST_CHECKED : BST_UNCHECKED); SetDlgItemInt( hwndDlg, IDC_VORBELEGUNG, mein_spiel.get_vorbelegung(), FALSE); SetDlgItemInt( hwndDlg, IDC_VORSCHAU, mein_spiel.get_vorschau(), FALSE); return TRUE; WM_COMMAND: … }
WM_COMMAND Fallunterscheidungen BOOL CALLBACK konfigurationsdialog (..) { … case WM_COMMAND: … if(wParam == IDOK) {…} if(wParam == IDCANCEL) {…} if (HIWORD(wParam) == BN_CLICKED) {…} …
Der Fall ‚IDOK‘ • Die Häckchen werden ausgelesen und im Array aktive_formen abgelegt. if(wParam == IDOK) { for( i = 0, anz_aktive_formen = 0; i < anzahl_formen; i++) { aktive_formen[i] = 0; if(IsDlgButtonChecked( hwndDlg, 5000+i) == BST_CHECKED) { aktive_formen[i] = 1; anz_aktive_formen++; } } … }
Default-Werte if( anz_aktive_formen == 0) { aktive_formen[0] = 1; anz_aktive_formen = 1; }
Übertragen der internen Daten und Beenden des Dialogs // Daten für die Vorbelegung und Vorschau: mein_spiel.set_vorbelegung( GetDlgItemInt( hwndDlg, IDC_VORBELEGUNG, NULL, FALSE)); mein_spiel.set_vorschau( GetDlgItemInt( hwndDlg, IDC_VORSCHAU, NULL, FALSE)); // Hinterher wird der Dialog beendet: EndDialog(hwndDlg, wParam); return TRUE;
‚Alle Löschen‘, ‚Standard‘ und ‚Alle Auswählen‘ switch( LOWORD(wParam)) { case IDC_LOESCHEN: for( i = 0; i < anzahl_formen; i++) CheckDlgButton( hwndDlg, 5000+i, BST_UNCHECKED); return TRUE; case IDC_ALLE: for( i = 0; i < anzahl_formen; i++) CheckDlgButton( hwndDlg, 5000+i, BST_CHECKED); return TRUE; case IDC_STANDARD: for( i = 0; i < anzahl_formen; i++) CheckDlgButton( hwndDlg, 5000+i, i < 7 ? BST_CHECKED:BST_UNCHECKED); return TRUE; }