matthiasr Geschrieben 12. Juni 2002 Geschrieben 12. Juni 2002 Meine Anwendung soll international werden. Also zur Einstimmung. Ich habe eine Menüleiste und möchte die Strings der Einträge verändern. Meine Versuche in der MainFrame und in der View sind gescheitert, scheinbar bekomme ich kein korrektes Handle und die Menüleiste zu manipulieren. Ich habe es auch schon versucht die Menüleiste als einzelnes, sprich mit CStatusBar versucht hatte allerdings wiederum keinen Erfolg. Währe toll wenn mir jemand helfen könnte. Vorab bereit ein Dankeschön. matthiasr Zitieren
Klotzkopp Geschrieben 12. Juni 2002 Geschrieben 12. Juni 2002 Original geschrieben von matthiasr Meine Versuche in der MainFrame und in der View sind gescheitert,Deine Versuche, das richtige Forum zu finden, auch Verschoben... Zum Thema: Hast Du einen UpdateUI-Handler für den zu ändernden Eintrag? Zitieren
matthiasr Geschrieben 12. Juni 2002 Autor Geschrieben 12. Juni 2002 Erwischt. Leider stehe ich noch in den Startlöchern meiner Programmiertzeit so das ich nur sehr wenig mit UpdatUI-Handler anfangen kann. Ich glaube deshalb sagen zu können, nein, habe ich nicht. matthiasr Zitieren
Klotzkopp Geschrieben 12. Juni 2002 Geschrieben 12. Juni 2002 Ich nehme mal an, dass Du MS VC benutzt. Du kannst UpdateUI-Handler genau wie Command-Handler für eine Command ID einfügen, indem Du im ClassWizard nicht COMMAND als zu behandelnde Nachricht auswählst, sondern UPDATE_COMMAND_UI. Diese Nachricht verschickt Windows jedesmal, wenn es der Meinung ist, dass der Status eines UI-Elements (Menü, Toolbar-Button usw) aktualisiert werden muss. Ein UpdateUI-Handler sieht typischerweise so aus: void CMainFrame::OnUpdateUIxyz(CCmdUI* pCmdUI) { } Über pCmdUI->m_pMenu kommst Du an ein gültiges CMenu heran. Du solltest in einem UpdateUI-Handler keine langwierigen Aktionen ausführen, weil die Dinger doch recht oft aufgerufen werden. Am besten setzt Du in Deiner Applikation ein Flag, wenn der Eintrag geändert werden soll, und fragst das Flag im UpdateUI-Handler ab. Zum Ändern des Eintrags brauchst Du CMenu::ModifyMenu. Zitieren
matthiasr Geschrieben 12. Juni 2002 Autor Geschrieben 12. Juni 2002 vorab Danke, ich were versuchen das ich das hinbekomme. Die Funktion ModifiyMenu kenne ich schon fast auswendig von meinen bisherigen versuchen. Danke für die Erklärung. matthiasr Zitieren
matthiasr Geschrieben 13. Juni 2002 Autor Geschrieben 13. Juni 2002 Ich komme nicht weiter, ich habe versucht Deinen Forschlag in die Tat um zu stetzen, hat aber nicht so richtig funktioniert. Die View wurde erst nachdem ich wieder einen Menüpunkt wählte aufgefrischt. In meiner Fram bin ich mit dem angefügten code soweit gekommen, dass ich zwar das Menü eleminieren kann, es mir beim Debuggen anzeitgt das es erfolgreich ausgeführt wird, aber sehen tu ich nur das es weg ist. Ich kann auch seperat keinen neuen Menüpunkt einfügen. Ich greife übreigens mit dem Zeiger pRLL auf eine externe Resource zu die ich zwar lade aber eben nicht anzeigen kann. int i1 = 0; int i2 = 0; int i3 = 0; CMenu Menu; CMenu* pMenu; HINSTANCE hInstance; hInstance = AfxGetInstanceHandle(); i1 = ::DestroyMenu(::GetMenu(hWnd)); char* pMenuName = MAKEINTRESOURCE(pRLL->LoadMenu(IDR_MAINFRAME)); i2 = ::SetMenu( hWnd,::LoadMenu(hInstance, pMenuName)); // i2 = Menu.LoadMenu((UINT)pRLL->LoadMenu(IDR_MAINFRAME)); // hMenu = ::LoadMenu(hInstance, pMenuName); Die i-Variablen sind nur zum Überpfüfen. Das sind eben meine Versuche(ein kleiner Auschnitt) matthiasr i3 = ::DrawMenuBar(hWnd); Zitieren
Guybrush Threepwood Geschrieben 28. März 2003 Geschrieben 28. März 2003 char* pMenuName = MAKEINTRESOURCE(pRLL->LoadMenu(IDR_MAINFRAME)); das wird wohl nicht funktionieren, du legst zwar einen char Pointer an, reservierst aber nicht den erforderlichen Speicherplatz um den String darin zu speichern. Entweder nimmst du dafür einen CString oder du machst es so: char* pMenuName = new char[strlen(MAKEINTRESOURCE(pRLL->LoadMenu...)]; strcpy(pMenuName,MAKEINTRESOURCE(pRLL->LoadMenu...)); [/PHP] Wenn du den String dann nicht mehr brauchst mußt du ihn mit delete[] wieder freigeben. Gruß Guybrush Zitieren
Klotzkopp Geschrieben 29. März 2003 Geschrieben 29. März 2003 MAKEINTRESOURCE ist ein Makro, das den Wert einer Resource-ID (üblicherweise ein #define für ein numerisches Literal) auf 16 Bit beschränkt und den Typ auf LPCTSTR ändert. Das ist aber nicht wirklich ein Zeiger auf einen String. Es macht keinen Sinn, dieses Makro auf den Rückgabewert von LoadMenu anzuwenden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.