möchte einen menüpunkt auswählen und dann die nachricht in WM_COMMAND auswerten! HILFE BITTE
-
Ich möchte einen menüpunkt auswählen und dann die nachricht in WM_COMMAND auswerten!
ich poste mal meinen quellcode

LRESULT CALLBACK WndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam) { char string[255] = ""; switch (umsg) { case WM_COMMAND: switch(LOWORD(wParam)) { case ID_FILE_OPEN: { LoadString(GetModuleHandle(NULL), ID_STRING_OPEN, string, sizeof(string)); MessageBox(hWnd,string, "Öffnen",MB_ICONINFORMATION); break; } }usw ....
die ID ID_FILE_OPEN ist vorhanden und ich habe sonst nichts vergessen!
laut einer beschreibung die ich gefunden habe steht, das die ID des gewählten menüpunktes im LOWORD des WPARAM steht, wenn dieses EVENT eintritt!
Als Nächstes erfolgt die Überprüfung auf die Nachricht WM_COMMAND
case WM_COMMAND:
Windows sendet diese Nachricht immer, wenn ein Menüelement ausgewählt wurde. Um was für ein Menüelement es sich handelt, wird in den folgenden Zeilen ausgewertet:switch(LOWORD(wParam)) { case ID_FILE_OPEN: LoadString(GetModuleHandle(NULL),ID_STRING_OPEN, string, sizeof(string)); MessageBox(hWnd,string, "Öffnen",MB_ICONINFORMATION); break; … … case ID_FILE_EXIT: DestroyWindow(hWnd); break; }Da die Fallunterscheidungen immer ähnlich ablaufen, wurde der Quelltext hier gekürzt. Wenn also Windows die Nachricht WM_COMMAND sendet, befindet sich die ID der Nachricht in den unteren zwei Bytes des Parameters wParam. Diese zwei Bytes können Sie mit dem Makro LOWORD() auswerten. Wurde bspw. das Menüelement "Öffnen" verwendet, befindet sich in den niedrigeren zwei Bytes der Wert der symbolischen Konstante ID_FILE_OPEN, welche Sie in der Headerdatei resoruce.h deklariert haben. In der nächsten Zeile
wieso funktioniert das aber bei mir nicht!
er kann die ID bei mir nicht im LOWORD des WPARAM finden!
bitte helft mir! wie gesagt ist der menüeintrag vorhanden und ich habe die ID richtig beschriftet und in der resource.h ect... ist auch alles ok!

-
jetzt kommt keine fehlermeldung mehr aber die messagebox wird nicht angezeigt??????????!??!??!?!?
switch(LOWORD(wParam)) { case ID_FILE_OPEN: LoadString(GetModuleHandle(NULL),ID_STRING_OPEN, string, sizeof(string)); MessageBox(hWnd,string, "Öffnen",MB_ICONINFORMATION); break;
-
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_FILE_OPEN:
LoadString(GetModuleHandle(NULL),ID_STRING_OPEN,
string, sizeof(string));
MessageBox(hWnd,string,
"Öffnen",MB_ICONINFORMATION);
break;
case ID_FILE_SAVE:
LoadString(GetModuleHandle(NULL),ID_STRING_SAVE,
string,sizeof(string));
MessageBox(hWnd,string,
"Speichern",MB_ICONINFORMATION);
break;
case ID_OPTIONS_OPTIONS_OPTION1:
LoadString(GetModuleHandle(NULL),ID_STRING_OPTION1,
string,sizeof(string));
MessageBox(hWnd,string,
"Option 1",MB_ICONINFORMATION);
break;
case ID_OPTIONS_OPTIONS_OPTION2:
LoadString(GetModuleHandle(NULL),ID_STRING_OPTION2,
string,sizeof(string));
MessageBox(hWnd,string,"Option 2",
MB_ICONINFORMATION);
break;
case ID_\1:
LoadString(GetModuleHandle(NULL),ID_STRING_ABOUT,
string,sizeof(string));
MessageBox(hWnd,string,"Über",MB_ICONINFORMATION);
break;
case ID_FILE_EXIT:
DestroyWindow(hWnd);
break;
}
break;
}
return DefWindowProc(hWnd,iMsg,wParam,lParam);
-
Bei mir kommt er in ID_FILE_EXIT rein und die MessageBox wird auch angezeigt. Vielleicht ist die WndProc nicht die zuständige für das Fenster das den Menüpunkt enthält ? Werden denn die anderen Menüpunkte ( ID_ABOUT, ID_FILE_EXIT, ... ) aufgerufen ?
Folgender Code wurde bei mir durch den App-Wizzard erstellt und sieht genauso aus wie bei dir

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case ID_FILE_OPEN: ::MessageBox( hWnd, _T("Hello World"), _T("Caption"), MB_OK ); break; } ... ... }
-
Also Deine Abfragen sind eigentlich korrekt. Bist Du Dir sicher, dass das Menü korrekt mit den ID's verknüpft ist?
-
hey codefinder, biste AC/DC fan?
am besten waren sie vor unserer zeit:
-->
http://youtube.com/watch?v=tBcZpN05_lk
http://youtube.com/watch?v=Xd2tphaA7rg
http://youtube.com/watch?v=3SxVOI5zfdQ

-
Undertaker schrieb:
hey codefinder, biste AC/DC fan?
Und wie, meine absolute Lieblingsband
.Undertaker schrieb:
am besten waren sie vor unserer zeit:
-->
http://youtube.com/watch?v=tBcZpN05_lk
http://youtube.com/watch?v=Xd2tphaA7rg
http://youtube.com/watch?v=3SxVOI5zfdQ

Joar die Tracks sind auch geil!
Finde aber fast alles gut, gibt eigentlich nur sehr weniger Songs, die ich nicht soo gern höre. Hab auch alle Alben, also: "am besten waren sie vor unserer zeit", jupp - das stimmt Bon war schon ne Machete^^, aber auch Brian rockt schon gut ab^^...hoffe ja, dass sie nochmal ne Tour machen
.
-
na, dann magste die bestimmt auch: http://youtube.com/watch?v=6CW8TJ1jfl0
gibt's auch noch (sind in wacken aufgetreten)

-
Oh, jo die kannte ich gar nit, hört sich auch gut an! (Wobei AC/DC bei mir weiterhin an Platz 1 steht^^)...aber doch, die gehen auch gut ab
.Das ist auch ganz geil...allerdings auch nit mehr ganz zeitgemäß
...
BTW: Kennst Du die Songs auf dem Powerage-Album (AC/DC)? Die sind auch genial...
-
CodeFinder schrieb:
BTW: Kennst Du die Songs auf dem Powerage-Album (AC/DC)? Die sind auch genial...
kenn' ich, aber am besten von ac/dc find' ich den: http://youtube.com/watch?v=-AfKGBXhMyw
(ist, glaub ich, auf 'dirty deeds done dirt cheap')

-
Jo, ist auch geil, ist auf dem DDDDC-Album drauf
.Edit: "There's Gonna Be Some Rockin'" (finde gerade kein Video dazu) müsste dann auch Deinen Geschmack treffen, ebenfalls auf dem Dirty Deeds Done Dirt Cheap-Album
.Hehe, was driftet dieser Thread gerade thematisch ab, naja ist für einen guten Zweck
.