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

    SetClassLong(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.


  • Mod

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


  • Mod

    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). 😃


  • Mod

    Ist hInstance korrekt gesetzt?
    Ansonsten müsste

    SetClassLong(hWnd, GCL_MENUNAME, reinterpret_cast<LONG_PTR>(MAKEINTRESOURCE(IDR_MENU2)))
    

    ;

    Sollte gehen.


Anmelden zum Antworten