Wie geht GCL_MENUNAME?
-
Hallo, lange nicht mehr gesehen im WinAPI-Forum.
Ich habe in einem Programm ein Menü mit
wndclass.lpszMenuName = MAKEINTREOURCE(IDR_MENU1)eingebunden. Später im Programm versuche ich, mit
SetClassLong(hWnd, GCL_MENUNAME, MAKEINTRESOURCE(IDR_MENU2)ein anderes Menu einzubinden. Leider funktioniert das nicht. Das Menü wird nicht geändert. Komischerweise gibt es aber keine Fehlermeldung.
AuchSetClassLong(hWnd, GCL_MENUNAME, &(MAKEINTRESOURCE(IDR_MENU2))funktioniert nicht, da meckert der Compiler über die Konvertierung eines Zeigers in eine Variable.
Leider finde ich keine Tutorials zu SetClassLong, und in der MSDN oder im Petzold stehen nur Beispiele uzm Ändern des Icons, das läuft aber über das Handle, nicht über den Namen.
-
was soll der aufruf von
SetClassLong(hWnd, GCL_MENUNAME, MAKEINTRESOURCE(IDR_MENU2)bewirken?
willst du den namen ändern?
oder etwas hinzufügen?..
-
Wie schon gesagt: Ich will ein anderes Menü einsetzen- genauer ein Menü mit den gleichen Funktionen, aber auf Englisch. Das zweite Menü ist als IDM_MENU2 in der Resourcendatei hinterlegt. Am Ende soll der Nutzer zwischen den Menüsprachen wählen können.
-
und wenn du einfach per
SetMenu(hwnd,hmenu);das menu austauschst?
-
Das geht nur, wenn das Menü NICHT in der Wndclass definiert ist, sondern per LoadMenu()-Handle eingebunden wird. Habe ich schon gemacht, funktioniert auch. Ich bräuchte aber eines auf Ebene der Fensterklasse.
-
Quatsch!
SetMenu geht immer!
-
Ah, ok, SetMenu läuft. Könnt Ihr mir trotzdem erklären, wie das mit GCL_MENUNAME funktioniert? Ich meine, irgendeinen Sinn muß das ja haben.

-
Wenn Du es überdie Klasse machst gilt es nur für jedes neu erzeugte Fenster!
-
Martin Richter schrieb:
Wenn Du es über die Klasse machst gilt es nur für jedes neu erzeugte Fenster!
Ja, genau darum geht es mir. Nun wüßte ich halt gerne, WIE der der Funktionsaufruf (bzw. die Parameterübergabe) aussehen muß, nicht was er bewirkt (das weiß ich ja schon).

-
Ist hInstance korrekt gesetzt?
Ansonsten müssteSetClassLong(hWnd, GCL_MENUNAME, reinterpret_cast<LONG_PTR>(MAKEINTRESOURCE(IDR_MENU2)));
Sollte gehen.