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

1

13.04.2008, 12:38

Menü mit der WINAPI

Hi Leute,
Ich habe vor kurzem versuch ein Menü in mein Fenster einzufügen, was aber nicht geklappt hat. :cry: Dabei habe ich es auf die Methode gamacht, wie sie im Buch "Windowsprogrammierung" steht! Ich bekomme beim ausführen des Programmes aber keine Fehler! Hier die Codestellen:

C-/C++-Quelltext

1
2
3
     case WM_CREATE: 
         hdc = GetDC(hwnd); 
         hMenu = LoadMenu(hInst, "MyMenu");

In der Resourcedatei habe ich mir mit dem Menüeditor von Visual Studio 6 das Menü namens "MyMenu" gemacht und hInst habe ich auserhalb definiert und im Hauptprogramm so deklariert:

C-/C++-Quelltext

1
hInst = hInstance;

Auch diese Art hat nicht geklappt:

C-/C++-Quelltext

1
wndclass.lpszMenuName  = "MyMenu";

Ich hoffe mir kann jemand helfen! Vielen Dank schon mal für die Hilfe.

2

13.04.2008, 12:58

Wenn du es als ID angegeben hast (symbolische Konstante, resource.h):

C-/C++-Quelltext

1
winclass.lpszMenuName  = MAKEINTRESOURCE(MyMenu); 


Analog über LoadMenu:

C-/C++-Quelltext

1
LoadMenu(hInstance, MAKEINTRESOURCE(MyMenu));

3

14.04.2008, 14:59

Vielen Dank! Funktioniert jetzt ohne Fehler :)

4

15.04.2008, 16:39

Aber jetzt kann ich die Menüauswahl nicht auswerten :( Aber diesmal bin ich mir sicher, dass ich nichts falsch gemacht habe!
Code von WM_COMMAND:

C-/C++-Quelltext

1
2
3
4
5
6
         hMenu = GetMenu(hwnd);
         switch(LOWORD(wParam)) 
         { 
         case IDM_DATEI_BEENDEN: 
             PostQuitMessage(0); 
                                 }

5

15.04.2008, 16:56

Betrifft das nur den Befehl/die ID "IDM_DATEI_BEENDEN", oder andere auch?

6

15.04.2008, 17:10

Nur IDM_DATEI_BEENDEN

7

15.04.2008, 17:19

Verstehe. Wenn du an der Stelle PostQuitMessage(0) verwendest, müßtest du an anderer Stelle auch darauf reagieren. Genauer gesagt, auf WM_QUIT welches PostQuitMessage deiner Anwendung postet.

8

16.04.2008, 17:26

Ich habe nun eine Alternative zum beenden gefunden:
SendMessage(hwnd, WM_CLOSE, 0, 0);
Funktioniert aber nicht. Mit einem anderen Menüpunkt funktioniert es aber. Auch eine MessageBox kann ich nur mit dem anderen Menüpunkt ausgeben

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

16.04.2008, 17:32

C-/C++-Quelltext

1
2
//hiermit beenden bei deinem menüpunkt:

    PostQuitMessage(0);


C-/C++-Quelltext

1
2
3
4
5
6
MSG stMsg;

if(GetMessage(/*...*/);
{
     if (msg.message == WM_QUIT) break; //ende, oder deine bool var oda was  weis ich :)

}

10

16.04.2008, 17:53

Poste doch mal den relevanten Code.

@TrommlBomml: Das Problem ist, daß sein Programm auf diesen einen Menüpunkt nicht reagieren will.

Werbeanzeige