LoadMenu mit String
-
Also ich wills nochmal erklären.
#define IDR_MENU1 101 // Möglichkeit 1 LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); // funktioniert // Möglichkeit 2 LoadMenu(hInstance, (LPCTSTR) IDR_MENU1); // funktioniert // Möglichkeit 3 LoadMenu(hInstance, "....."); // was muss ich hier statt den ..... eintragen, damit es funktioniert?
oder du setzte die ID bei ID einen Namen in "" ein, dann schreibst du nachher einfach direkt den Namen hin (auch in "" natürlich)
Das verstehe ich leider nicht.
-
#define IDR_MENU1 101 // Möglichkeit 3 LoadMenu(hInstance, TEXT("#101"));
Im Grunde ist das aber Blödsinn. Das brauchst Du normalerweise nur, wenn Du dem Menü eben nicht mit einem Integer-Identifier in den Ressourcen speicherst, sondern mit seinem Namen.
-
Ahh :), danke King.
Also das haut schonmal hin.
Ich habe mich nach dem Sinn gefragt, warum LoadMenu (und andere derartige Resource-Ladefunktionen) einen String entgegennehmen und nicht direkt die ID.
Also warum die Funktion nicht so aussieht:
LoadMenu(HINSTANCE, UINT);
Wie vergibt man denn seinem Menü (mit dem Ressourceneditor von Visual Studio) einen Namen, statt einer ID?
Ach und ist das mit dem # vor der ID (wie du es gezeigt hast) irgendwo in der MSDN dokumentiert?
-
Konnte doch flenders Beschreibung nach einiger Zeit nachvollziehen.
-
toxic schrieb:
CMenu* pMenu = new CMenu(); pMenu->LoadMenu(IDR_MAINFRAME); SetMenu(pMenu);
des is aber mfc.... => falsches forum *gg
-
vs schrieb:
Wie vergibt man denn seinem Menü (mit dem Ressourceneditor von Visual Studio) einen Namen, statt einer ID?
Du mußt dafür sorgen, daß es kein define gibt. Wenn also IDR_MENU1 nirgendwo definiert ist, wird es als String angenommen. Dann mußt Du tatsächlich "IDR_MENU1" beim Laden schreiben. Wie das mit dem Editor geht, weiß ich auch nicht. Per händischer Nacharbeit bist Du schnell am Ziel.
Das ist aber, wie gesagt, Blödsinn. Es dauert länger, bis das Menü geladen ist. Außerdem nimmt das Menü mehr Platz in den Ressourcen ein. Verwende lieber Intergers.
vs schrieb:
Ach und ist das mit dem # vor der ID (wie du es gezeigt hast) irgendwo in der MSDN dokumentiert?
Das ist gängige Praxis unter Windows und gilt nicht nur für Ressourcen. Schau Dir beispielsweise die Remarks zu FindResource an.
-
Du kannst es theoretisch einfach "IDR_MENU1" nennen (also mit ""). Dann wird afaik keine ID vergeben, sondern direkt der String verwendet (siehe -King-s Kommentar) - ist aber ja eh nicht so sehr sinnvoll
-
flenders schrieb:
Du kannst es theoretisch einfach "IDR_MENU1" nennen (also mit "").
Der Ressourcen-Compiler des VC macht da aber was anderes draus. Du mußt das Menü dann so laden:
LoadMenu(hInst, TEXT("\"IDR_MENU1\""));
Edit: Schreiben kann man das aber so, da hast Du natürlich recht.
-
Also wenn ich unter Eigenschaften bei ID einen String (bzw. halt in "" eingeschlossen) - z.B. "TestMenu" eingebe, steht das ohne "" im .rc (also TestMenu) und kann dann ganz normal mit direkt mit dem String ("TestMenu") geladen werden
-
Ah, Du sprichst vom Editor. Das habe ich falsch verstanden, ich war noch bei der händischen Nacharbeit. Da steht es dann eben so wie eingegeben. Sorry dafür.