Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

11

20.07.2006, 22:02

Zitat von »"g-HuN"«

Ja es geht!!
Aber was ist dieses "#undef UNICODE"?
Um es auf den Punkt zu bringen: Nichts Edles.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

12

20.07.2006, 22:03

jaja, Anfänger haben damit ihre Probleme und deshalb reicht es auch wenn die einfach ein undef hinklatschen, ich glaub nicht, das er den Code in 2 Tagen verkaufen wird ^^

#undef UNICODE deaktiveriert den 16Bit Zeichsatz, du hast damit "nur" 255 Zeichen. Da du aber glaub ich nicht in den nächsten Tagen Chiesische Zeichen etc. brauchst, reicht das undef. Wenn du dich damit näher beschäftigen willst: => Forensuche

Anonymous

unregistriert

13

20.07.2006, 22:03

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
// C++ für Spieleprogrammierer

// Listing 10.3

// Eine kleine Anwendung

//


#include <windows.h>

// Prototypen

//

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam);

HWND ErstelleHauptfenster (HINSTANCE hInst);
void ErstelleSteuerelemente (HWND hWnd, HINSTANCE hInst);

// IDs der Child-Fenster

//

#define ID_STATICTEXT      4000
#define ID_EDITBOX         4001
#define ID_BTN_UEBERNEHMEN 4002
#define ID_BTN_BEENDEN     4003

// Globale Variablen

// Don't do this at home!

//

HWND hText;        // Handle für den statischen Text

HWND hEditBox;     // Handle für die Editbox

HWND hUebernehmen; // Handle für Button "Übernehmen"

HWND hBeenden;     // Handle für Button "Beenden"


// Hauptprogramm

//

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
                    LPSTR lpcmdline, int ncmdshow)
{
  HWND hWnd;   // Fenster-Handle

  MSG message; // Nachricht


  // Hauptfenster erstellen

  hWnd = ErstelleHauptfenster (hInst);

  // Prüfen, ob alles glatt ging

  if (hWnd == NULL)
    return (0);

  // Alle Steuerelemente erstellen

  ErstelleSteuerelemente (hWnd, hInst);

  // Der "Herzschlag" des Programms

  // Hier werden alle Nachrichten abgeholt,

  // übersetzt und weitergeleitet

  //

  while (GetMessage (&message, NULL, 0, 0) )
  {
    TranslateMessage (&message);
    DispatchMessage  (&message);

  }

  // Programm beenden

  return (int)(message.wParam);

} // WinMain



// Erstelle Hauptfenster

//

// Hauptfenster erstellen und Handle zurückliefern

//

HWND ErstelleHauptfenster (HINSTANCE hInst)
{
  HWND        hWnd;        // Fenster-Handle

  WNDCLASSEX  windowclass; // Nachricht


  // Der Klassenname des Fensters ist frei wählbar

  const char szClassName[] = "Zweites Fenster";

  // Struktur mit gewünschten Eigenschaften füllen

  //


  // Größe der Struktur zwischenspeichern

  windowclass.cbSize = sizeof (WNDCLASSEX);

  // Fenster soll beim Verschieben neu gezeichnet werden

  windowclass.style = CS_HREDRAW | CS_VREDRAW;

  // Zeiger auf Callback-Funktion

  windowclass.lpfnWndProc = WindowProc;

  // Keine erweiterten Einstellungen

  windowclass.cbClsExtra = 0;
  windowclass.cbWndExtra = 0;

  // Instanz speichern

  windowclass.hInstance = hInst;

  // Icons und Cursor festlegen

  windowclass.hIcon   = LoadIcon (NULL, IDI_APPLICATION);
  windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);

  // Hintergrundfarbe festlegen

  windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;

  // Ein Menü brauchen wir nicht

  windowclass.lpszMenuName = NULL;

  // Klassenname angeben

  windowclass.lpszClassName = (LPCWSTR)szClassName;

  // Fensterklasse registrieren

  if (!RegisterClassEx (&windowclass) )
    return (NULL);

  // Das Fenster erzeugen

  hWnd = CreateWindowEx (NULL,
                         (LPCWSTR)szClassName,
                         L"Eine kleine Anwendung",
                         WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                         CW_USEDEFAULT, CW_USEDEFAULT,
                         300, 135,
                         NULL,
                         NULL,
                         hInst,
                         NULL);

  // Fensterhandle zurückgeben

  return (hWnd);

} // ErstelleHauptfenster



// ErstelleSteuerelemente

//

// Alle Steuerelemente erstellen

//

void ErstelleSteuerelemente (HWND hWnd, HINSTANCE hInst)
{
  // Statischen Text als Child-Fenster erstellen

  //

  hText = CreateWindow (L"STATIC",
                        L"Eingegebener Text",
                        WS_VISIBLE | WS_CHILD | ES_CENTER,
                        0, 0,
                        300, 20,
                        hWnd,
                        (HMENU)ID_STATICTEXT,
                        hInst,
                        NULL);

  // Editbox als Child-Fenster erstellen

  //

  hEditBox = CreateWindow (L"EDIT",
                           L"Bitte Text eingeben",
                           WS_VISIBLE | WS_CHILD | WS_BORDER,
                           0, 20,
                           300, 20,
                           hWnd,
                           (HMENU)ID_EDITBOX,
                           hInst,
                           NULL);

  // "Übernehmen"-Button als Child-Fenster erstellen

  //

  hUebernehmen = CreateWindow (L"BUTTON",
                           L"Übernehmen",
                           BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
                           20, 50,
                           95, 40,
                           hWnd,
                           (HMENU)ID_BTN_UEBERNEHMEN,
                           hInst,
                           NULL);

  // "Beenden"-Button als Child-Fenster erstellen

  //

  hBeenden = CreateWindow (L"BUTTON",
                           L"Beenden",
                           BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
                           175, 50,
                           95, 40,
                           hWnd,
                           (HMENU)ID_BTN_BEENDEN,
                           hInst,
                           NULL);

} // ErstelleSteuerelemente



// Callback-Funktion zur Nachrichtenverarbeitung

//

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam)
{
  // Messages auswerten

  switch (message)
  {
    // Fenster schließen? (Auch Alt-F4)

    case WM_DESTROY:
    {
      // Nachricht zum Beenden schicken

      PostQuitMessage (0);
      return (0);

    }

    // Ab hier die Nachrichten unserer Child-Fenster bearbeiten

    case WM_COMMAND:
    {
      switch (wParam)
      {
        // Wurde "Übernehmen" angeklickt?

        case ID_BTN_UEBERNEHMEN:
        {
          char szText[256];

          // Text aus der Editbox holen

          GetWindowText (hEditBox, (LPWSTR)szText, 256);

          // Diesen Text in das Label schreiben und

          // den Text der Editbox löschen

          SetWindowText (hText, (LPCWSTR)szText);
          SetWindowText (hEditBox, L"");

          return (0);

        }

        // Wurde "Beenden" angeklickt?

        case ID_BTN_BEENDEN:
        {
          int Resultat; // Rückgabewert der Messagebox


          // Messagebox für Sicherheitsabfrage

          Resultat = MessageBox (hWnd, L"Wirklich beenden?",
                                 L"Programm beenden",
                                 MB_YESNO | MB_ICONQUESTION);

          // Wurde "Ja" angeklickt?

          if (Resultat == IDYES)
          {
            // Ja, also Programm beenden

            PostQuitMessage (0);
            return (0);

          }

          // Nein, also ganz normal weiter

          return (0);

        }
      } break;
    } break;
  }

  // Die Nachricht wurde nicht von uns verarbeitet, also

  // von Windows verarbeiten lassen

  return (DefWindowProc (hWnd, message, wParam, lParam) );

} // WindowProc 


So funktionierts.

P.S.: Falsches Forum ;)

g-HuN

Frischling

  • »g-HuN« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Iserlohn

Beruf: Schüler (balt mal IT-Ingenieur!)

  • Private Nachricht senden

14

20.07.2006, 22:05

Naja...
Ich mache auch zur zeit kein win api.

Aber werde ich dieses #undef UNICODE
beim lernen von WINAPI mitlernen?

PS--> Gibt ma bitte ne kurze erläuterung...
Von dem niederländischen Informatiker Edsger Dijkstra stammt der Satz „In der Informatik geht es genauso wenig um Computer wie in der Astronomie um Teleskope“

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

15

20.07.2006, 22:07

^--------

Zitat von »"koschka"«


#undef UNICODE deaktiveriert den 16Bit Zeichsatz, du hast damit "nur" 255 Zeichen. Da du aber glaub ich nicht in den nächsten Tagen Chiesische Zeichen etc. brauchst, reicht das undef. Wenn du dich damit näher beschäftigen willst: => Forensuche


reicht die ;)

p.s. verschoben, dürfte doch passen ^^

Anonymous

unregistriert

16

20.07.2006, 22:09

Wenn du mit UniCode proggen willst, musst du die Chars einfach in
LPCWSTR konvertieren. Bei vorhandenen Variablen: (LPCWSTR)
Und bei einem String, den du so eingibst: L"Hallo!";

EDIT: Naja gehört ja eigentlich in "C++ für Spieleprogrammierer" ;)

g-HuN

Frischling

  • »g-HuN« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Iserlohn

Beruf: Schüler (balt mal IT-Ingenieur!)

  • Private Nachricht senden

17

20.07.2006, 22:10

Das geht aber nicht!!!!!
HELP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
// C++ für Spieleprogrammierer 

// Listing 10.3 

// Eine kleine Anwendung 

// 


#undef UNICODE
#include <windows.h> 

// Prototypen 

// 

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, 
                             WPARAM wParam, LPARAM lParam); 

HWND ErstelleHauptfenster (HINSTANCE hInst); 
void ErstelleSteuerelemente (HWND hWnd, HINSTANCE hInst); 

// IDs der Child-Fenster 

// 

#define ID_STATICTEXT      4000 
#define ID_EDITBOX         4001 
#define ID_BTN_UEBERNEHMEN 4002 
#define ID_BTN_BEENDEN     4003 

// Globale Variablen 

// Don't do this at home! 

// 

HWND hText;        // Handle für den statischen Text 

HWND hEditBox;     // Handle für die Editbox 

HWND hUebernehmen; // Handle für Button "Übernehmen" 

HWND hBeenden;     // Handle für Button "Beenden" 


// Hauptprogramm 

// 

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, 
                    LPSTR lpcmdline, int ncmdshow) 
{ 
  HWND hWnd;   // Fenster-Handle 

  MSG message; // Nachricht 


  // Hauptfenster erstellen 

  hWnd = ErstelleHauptfenster (hInst); 

  // Prüfen, ob alles glatt ging 

  if (hWnd == NULL) 
    return (0); 

  // Alle Steuerelemente erstellen 

  ErstelleSteuerelemente (hWnd, hInst); 

  // Der "Herzschlag" des Programms 

  // Hier werden alle Nachrichten abgeholt, 

  // übersetzt und weitergeleitet 

  // 

  while (GetMessage (&message, NULL, 0, 0) ) 
  { 
    TranslateMessage (&message); 
    DispatchMessage  (&message); 

  } 

  // Programm beenden 

  return (int)(message.wParam); 

} // WinMain 



// Erstelle Hauptfenster 

// 

// Hauptfenster erstellen und Handle zurückliefern 

// 

HWND ErstelleHauptfenster (HINSTANCE hInst) 
{ 
  HWND        hWnd;        // Fenster-Handle 

  WNDCLASSEX  windowclass; // Nachricht 


  // Der Klassenname des Fensters ist frei wählbar 

  const char szClassName[] = "Zweites Fenster"; 

  // Struktur mit gewünschten Eigenschaften füllen 

  // 


  // Größe der Struktur zwischenspeichern 

  windowclass.cbSize = sizeof (WNDCLASSEX); 

  // Fenster soll beim Verschieben neu gezeichnet werden 

  windowclass.style = CS_HREDRAW | CS_VREDRAW; 

  // Zeiger auf Callback-Funktion 

  windowclass.lpfnWndProc = WindowProc; 

  // Keine erweiterten Einstellungen 

  windowclass.cbClsExtra = 0; 
  windowclass.cbWndExtra = 0; 

  // Instanz speichern 

  windowclass.hInstance = hInst; 

  // Icons und Cursor festlegen 

  windowclass.hIcon   = LoadIcon (NULL, IDI_APPLICATION); 
  windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); 
  windowclass.hCursor = LoadCursor (NULL, IDC_ARROW); 

  // Hintergrundfarbe festlegen 

  windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1; 

  // Ein Menü brauchen wir nicht 

  windowclass.lpszMenuName = NULL; 

  // Klassenname angeben 

  windowclass.lpszClassName = szClassName; 

  // Fensterklasse registrieren 

  if (!RegisterClassEx (&windowclass) ) 
    return (NULL); 

  // Das Fenster erzeugen 

  hWnd = CreateWindowEx (NULL, 
                         szClassName, 
                         "Eine kleine Anwendung", 
                         WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
                         CW_USEDEFAULT, CW_USEDEFAULT, 
                         300, 135, 
                         NULL, 
                         NULL, 
                         hInst, 
                         NULL); 

  // Fensterhandle zurückgeben 

  return (hWnd); 

} // ErstelleHauptfenster 



// ErstelleSteuerelemente 

// 

// Alle Steuerelemente erstellen 

// 

void ErstelleSteuerelemente (HWND hWnd, HINSTANCE hInst) 
{ 
  // Statischen Text als Child-Fenster erstellen 

  // 

  hText = CreateWindow ("STATIC", 
                        "Eingegebener Text", 
                        WS_VISIBLE | WS_CHILD | ES_CENTER, 
                        0, 0, 
                        300, 20, 
                        hWnd, 
                        (HMENU)ID_STATICTEXT, 
                        hInst, 
                        NULL); 

  // Editbox als Child-Fenster erstellen 

  // 

  hEditBox = CreateWindow ("EDIT", 
                           "Bitte Text eingeben", 
                           WS_VISIBLE | WS_CHILD | WS_BORDER, 
                           0, 20, 
                           300, 20, 
                           hWnd, 
                           (HMENU)ID_EDITBOX, 
                           hInst, 
                           NULL); 

  // "Übernehmen"-Button als Child-Fenster erstellen 

  // 

  hUebernehmen = CreateWindow ("BUTTON", 
                           "Übernehmen", 
                           BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, 
                           20, 50, 
                           95, 40, 
                           hWnd, 
                           (HMENU)ID_BTN_UEBERNEHMEN, 
                           hInst, 
                           NULL); 

  // "Beenden"-Button als Child-Fenster erstellen 

  // 

  hBeenden = CreateWindow ("BUTTON", 
                           "Beenden", 
                           BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, 
                           175, 50, 
                           95, 40, 
                           hWnd, 
                           (HMENU)ID_BTN_BEENDEN, 
                           hInst, 
                           NULL); 

} // ErstelleSteuerelemente 



// Callback-Funktion zur Nachrichtenverarbeitung 

// 

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, 
                             WPARAM wParam, LPARAM lParam) 
{ 
  // Messages auswerten 

  switch (message) 
  { 
    // Fenster schließen? (Auch Alt-F4) 

    case WM_DESTROY: 
    { 
      // Nachricht zum Beenden schicken 

      PostQuitMessage (0); 
      return (0); 

    } 

    // Ab hier die Nachrichten unserer Child-Fenster bearbeiten 

    case WM_COMMAND: 
    { 
      switch (wParam) 
      { 
        // Wurde "Übernehmen" angeklickt? 

        case ID_BTN_UEBERNEHMEN: 
        { 
          char szText[256]; 

          // Text aus der Editbox holen 

          GetWindowText (hEditBox, szText, 256); 

          // Diesen Text in das Label schreiben und 

          // den Text der Editbox löschen 

          SetWindowText (hText, szText); 
          SetWindowText (hEditBox, ""); 

          return (0); 

        } 

        // Wurde "Beenden" angeklickt? 

        case ID_BTN_BEENDEN: 
        { 
          int Resultat; // Rückgabewert der Messagebox 


          // Messagebox für Sicherheitsabfrage 

          Resultat = MessageBox (hWnd, "Wirklich beenden?", 
                                 "Programm beenden", 
                                 MB_YESNO | MB_ICONQUESTION); 

          // Wurde "Ja" angeklickt? 

          if (Resultat == IDYES) 
          { 
            // Ja, also Programm beenden 

            PostQuitMessage (0); 
            return (0); 

          } 

          // Nein, also ganz normal weiter 

          return (0); 

        } 
      } break; 
    } break; 
  } 

  // Die Nachricht wurde nicht von uns verarbeitet, also 

  // von Windows verarbeiten lassen 

  return (DefWindowProc (hWnd, message, wParam, lParam) ); 

} // WindowProc 
Von dem niederländischen Informatiker Edsger Dijkstra stammt der Satz „In der Informatik geht es genauso wenig um Computer wie in der Astronomie um Teleskope“

Anonymous

unregistriert

18

20.07.2006, 22:11

Kopier doch einfach mal mein Beispiel und compilier das, dann funktionierts!

g-HuN

Frischling

  • »g-HuN« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Iserlohn

Beruf: Schüler (balt mal IT-Ingenieur!)

  • Private Nachricht senden

19

20.07.2006, 22:16

DANKE!!

Ich hab mich kurz vertan alle beide Codes funktionieren.
Das mit UNICODE und das von DarkRaider.

Aber wenn ich bald mal die Spieleprogrammierung lernen möchte.

Und die beispiele nachmache.

Wenn die nicht funktionierern,
was soll ich dann machen?

Gibs keine neuen Bücher für die Spieleprogrammierung mit C++ unter Visual C++ 2005 EE?
Von dem niederländischen Informatiker Edsger Dijkstra stammt der Satz „In der Informatik geht es genauso wenig um Computer wie in der Astronomie um Teleskope“

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

20

20.07.2006, 22:19

ähm Kopfstand machen, dreimal dich überschlagen und mir nen Sack voller Geld schicken.

du kannst alternativ auch dein Problem posten, forensuche bzw. googlen. Das wichtigste ist aber das du das verstehst was du da machst und nicht nur wild rumkopierst

Werbeanzeige