Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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?

Geschrieben

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

Geschrieben

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.

Geschrieben

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);

  • 9 Monate später...
Geschrieben
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

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...