1 / 16

Vers. 6: Der Konfigurationsdialog

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,

feng
Download Presentation

Vers. 6: Der Konfigurationsdialog

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Vers. 6: Der Konfigurationsdialog Quelle: „Spieleprogrammierung mit DirectX und C++“, U. Kaiser und P. Lensing, Galileo Computing (2007)

  2. Der Konfigurationsdialog

  3. 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;

  4. Definition der Klasse ‚ultris‘ und einer Instanz class ultris { private: public: }; // Erzeugen der Instanz: ultris mein_spiel;

  5. 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;} };

  6. 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;}

  7. Identifier des Dialogs IDD_KONFIGURATION 125 IDC_STANDARD IDC_LOESCHEN IDC_VORBELEGUNG IDC_VORSCHAU IDC_CHECK1 5000 … IDC_CHECK355034

  8. 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; ...

  9. Fallunterscheidungen des Dialoghandlers BOOL CALLBACK konfigurationsdialog (..) { switch (uMsg) { case WM_INITDIALOG: … case WM_COMMAND: … } … Return FALSE; }

  10. 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.

  11. 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: … }

  12. WM_COMMAND Fallunterscheidungen BOOL CALLBACK konfigurationsdialog (..) { … case WM_COMMAND: … if(wParam == IDOK) {…} if(wParam == IDCANCEL) {…} if (HIWORD(wParam) == BN_CLICKED) {…} …

  13. 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++; } } … }

  14. Default-Werte if( anz_aktive_formen == 0) { aktive_formen[0] = 1; anz_aktive_formen = 1; }

  15. Ü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;

  16. ‚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; }

More Related