Text im Menü ändern



  • Hallo,

    Ich möchte in meinem Programm zwischen mehreren Sprachen wechseln können. Dazu muss natürlich auch das Menü verändert werden.

    Bei den Menü-Einträgen funktioniert das auch prima (mit ModifyMenuItem()), doch wie mache ich das mit der Titel-Leiste (z.B. "Datei" in "File" ändern)???

    Ich habe hier im Forum einen Beitrag gefunden, doch die Lösung wurde dem "Fragenden" per Mail zugeschickt. Ich wäre demjenigen, der das HIER posten könnte sehr dankbar!!!

    Gruss

    BigRed



  • Hallo...

    Habe dies zwar auch noch nie so gemacht...Habe nur schon Titeleinträge "eingegraut"... 😃

    Ich habe mal kurz in der MSDN nachgesehen und da hat neben der ModifyItem noch die SetMenuItemInfo Funktion...Vielleicht bringt dich das weiter..

    [url]
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/menus/menureference/menufunctions/modifymenu.asp
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/menus/menureference/menufunctions/setmenuiteminfo.asp
    [/url]

    ich habe da bei der ModifyItem Funktion noch gelesen, dass die zwar einen Titel (Ist glaub ich der Identifier) ändern kann, das Submenu dadurch aber komplett gelöscht wird...

    Ich kann mir vorstellen, dass Du da warscheinlich nicht drumrum kommen wirst,das komplette Menu neu zu erstellen....

    Wäre es vielleicht nicht möglich, zwei Menuleisten (eine für Deutsch und die andere für Englisch) als resourcen anzulegen um diese bei den verschiedenen Versionen dann auszuwechseln? 😕 Nur so ne Idee...

    Gruzz Danny



  • Hallo,

    Danke für den Tip. Das mit dem Auswechseln habe ich auch schon gemacht, doch das Programm stürzt auf diese Weise beim Beenden immer ab und ausserdem verschwindet der Schliessen-Button im Fenstertitel. Einen erprobten Quelltext zum Wechseln des Menüs wäre natürlich das optimalste... somit müsste ich nicht immer jedes einzelne Menü-Item umbenennen.

    Hat von euch zufällig jemand so was??

    Ich kann mich erinnern, dass ich das mit DestroyMenu und SetMenu o.ä. gemacht habe... 😞

    Gruss

    BigRed



  • void CMyDlg::OnAllestoppen() 
    {
    	if(start ==true)
    	{
    		GetMenu()->GetSubMenu(1)->ModifyMenu(1, MF_STRING | MF_BYPOSITION ,ID_SCHEDULER_ALLESTOPPEN, "alle Stoppen");
    		start = false;
    	}
    	else
    	{
    		GetMenu()->GetSubMenu(1)->ModifyMenu(1, MF_STRING | MF_BYPOSITION ,ID_SCHEDULER_ALLESTOPPEN, "alle Starten");
    		start = true;
    	}
    }
    

    Devil



  • Jaaaa... damit tu man ja den Text der Menüpunkte ändern. Das habe ich auch schon raus gefuden (trotzdem danke!). Ich möchte jedoch auch die Titelleiste ändern.

    Mal zu der oben erwähnten Abhilfe: Hat von euch jemand einen Code parat, mit welchem man die Menüs in einer Dialog-Anwendung wechseln kann??? In Codeguru habe ich was gefunden und die Menüs wechseln war, doch ich kann dann nichts mehr öffnen und das Programm stürzt beim Beenden ab.

    Danke!!

    Gruss

    BigRed



  • Hallo,

    Ich habe jetzt heraus gefunden, wie ich die Titelleiste ändern kann:

    if (Registry.m_Language == 0)
    	{
    		GetMenu()->ModifyMenu(0, MF_BYPOSITION, (UINT)(GetMenu()->GetSubMenu(0)->GetSafeHmenu()), "&Datei");
    		GetMenu()->ModifyMenu(1, MF_BYPOSITION, (UINT)(GetMenu()->GetSubMenu(1)->GetSafeHmenu()), "&Einstellungen");
    		GetMenu()->ModifyMenu(3, MF_BYPOSITION, (UINT)(GetMenu()->GetSubMenu(3)->GetSafeHmenu()), "&Hilfe");			
    
    		GetMenu()->ModifyMenu(IDCANCEL, MF_BYCOMMAND, IDCANCEL, "&Beenden");
    		GetMenu()->ModifyMenu(ID_MAILSERVER, MF_BYCOMMAND, ID_MAILSERVER, "EMail-&Konto");
    		GetMenu()->ModifyMenu(ID_LIST, MF_BYCOMMAND, ID_LIST, "&Datei-/Verzeichnisliste");
    //u.s.w.
    	}
    	else
    	{
    
    		GetMenu()->ModifyMenu(0, MF_BYPOSITION, (UINT)(GetMenu()->GetSubMenu(0)->GetSafeHmenu()), "&File");
    		GetMenu()->ModifyMenu(1, MF_BYPOSITION, (UINT)(GetMenu()->GetSubMenu(1)->GetSafeHmenu()), "&Configuration");
    		GetMenu()->ModifyMenu(3, MF_BYPOSITION, (UINT)(GetMenu()->GetSubMenu(3)->GetSafeHmenu()), "&Help");	
    
    		GetMenu()->ModifyMenu(IDCANCEL, MF_BYCOMMAND, IDCANCEL, "E&xit");
    		GetMenu()->ModifyMenu(ID_MAILSERVER, MF_BYCOMMAND, ID_MAILSERVER, "EMail-&Account");
    		GetMenu()->ModifyMenu(ID_LIST, MF_BYCOMMAND, ID_LIST, "File-/&Directory-List");
    //u.s.w.
    
    	}
    

    Das Problem: Ich muss das Menü danach auffrischen und weiss nicht, wie das geht. Wenn ich mit der Maus drüber fahre, aktualisieren sich nur die Menüpunkte, welche ich mit der Maus berühre. Ausserdem ist das englische Menü kürzer (weniger Buchstaben) und ein Teil des Menüs ist danach rechts zu sehen.

    Weiss jemand, wie ich das Menü auffrischen kann (so was wie Redraw oder so was)?

    Danke!!

    Gruss

    BigRed



  • Hi,

    zum Refreshen des Menus:

    DrawMenuBar();
    

    Gruss

    yeti



  • Problem gelöst!!

    Danke an alle!!


Anmelden zum Antworten