Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

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

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.