Menübegriffe ändern



  • Hallo Leute,
    ich habe folgendes Problem:

    Mein Projekt soll mehrsprachig sein und man sollte während der Laufzeit die Sprache umstellen können. Dabei sollen die Begriffe und die Beschreibungen der Menüpunkte geändert werden. Ich habe mich ein wenig mit der Klasse CMenu beschäftigt, jedoch erfolglos. Sobald ich eine Methode aufrufe, crasht das Programm. WIe man direkt auf die Menüpunkte zugreifen kann ist mir auch unbekannt.

    Kennt einer von euch vielleicht eine Möglichkeit die Menüpunkte umzubenennen?
    Grüße
    Ape


  • Mod

    Welche MFC verwendest Du?

    Du kannst mit GemMenu auf das aktuelle Menü Zugreifen, dann hast Du ein gültiges Handle und kannst die Texte verwändern.

    Ich halte davon wenig. Benutzer wollen eigentlich die Sprache sehen, in der das eigene OS läuft. Wenn der Benutzer die Sprache umstellt, nimmt er auch einen Neustart in Kauf, wenn danach die Sprache erscheint wie er es möchte...
    Just my 2 cents.

    Ansonsten:
    http://www.mpdvc.de/artikel/MultilingualeProgramme.htm



  • Danke für die Antwort. Ich habe mal die Beschreibung, die du verlinkt hast, durchgelesen. Aber ich glaube das entspricht nicht meinen wünschen. Soweit ich verstanden habe, müsse man das Programm dann neu umkompilieren. Ich habe möchte aber die Sprache zur Laufzeit ändern.
    Was genau meinst du mit GemMenu? Ich habe mal danach gegoogelt, aber nichts gefunden.



  • "GetMenu"



  • Alles klar, aber ich bekommse ständig Zugriffsverletzungen
    Ich rufe von einem Item der Toolbar folgenden Code auf:

    CMenu *pMenu = GetMenu();
    pMenu->GetMenuItemCount(); //Hier bekomm ich eine Zugriffsverletzung
    delete pMenu;
    

    Meine nächste Frage wäre, welche Methode sich genau auf die Menuitembezeichnungen bezieht.



  • 1. Schau Dir mal ModifyMenu(..) von CMenu an.

    2. Außerdem solltest Du Deinen pMenu-Pointer auf Gültigkeit prüfen, bevor Du ihn benutzt:

    CMenu *pMenu = GetMenu();
    if (pMenu)
    {
    ...
    }
    

    3. Das "delete" ist überflüssig, bzw. falsch.



  • Alles schön und gut... trotzdem hilft mir das nicht weiter.
    Durch GetMenu() kommt ich auf eine NULL-Adresse und nicht auf das
    Menü. Ich glaube, ich lass das mit dem Modifizieren bleiben und lass
    das Menü einfach neu aufbauen.



  • Kopier mal mehr Code hier rein. An welcher Stelle genau rufst Du das GetMenu() auf?



  • Ich rufe die Funktion von einem Dialogfenster der Toolbox auf (zu Testzwecken).

    void CAboutDlg::OnBnClickedOk()
    {
    	CMenu *pMenu = GetMenu(); //wird NULL
    	CMenu *pSubMenu = pMenu->GetSubMenu(0); //Zugriffsverletzung
    	CMenu *pSystemMenu = GetSystemMenu(false); //das funktioniert
    	CDialogEx::OnOK();
    }
    


  • Och ich bin auch so doof... Ich versuche ja das Menü des Dialogs aufzurufen (was aber nicht existiert) und nicht das des Hauptformulars. Sorry, ich guck nochmal drüber.



  • 😉


Log in to reply