Gibt es denn kein richtiges MFC-Tutorial/Buch?
-
Hallo!
ich suche verzweifelt nach einem MFC-Buch/Lerntutorial, dass nicht gnadenlos veraltet mit VS 6 arbeitet. Die, die ich bei Google finde, sind scheußlich, die fangen gleich an mit dem Grafik-Editor, ich will lieber alles hart programmieren, um zu verstehen, wie es funktioniert, wie man es bei wxWidgets machen kann. Bis heute habe ich z.B. nicht gefunden, wie man die MenuBar mit CMenu programmiert, ohne Ressourcen-Editor. Was kann ich bloß tun...?
-
Das einziges was vielleicht veraltet ist, dass ist der Umgang mit dem Classwizard. Sonst ist alles beim alten.
Lies einfach die MSDN mal zu CMenu. Welche Methoden beginnen z.B. mit Add? Wäre ein Ansatz oder.
-
Die MSDN ist mehr als spärlich in dem Bereich. Ihr Beispiel:
CMyWindow::CMyWindow() { CMenu mnu, file; mnu.CreateMenu(); file.CreatePopupMenu(); file.AppendMenuA(MF_STRING, ID_APP_EXIT, "Exit"); mnu.AppendMenuA(MF_POPUP, (UINT_PTR) file.m_hMenu, "Datei"); SetMenu(NULL); CMenu *old = CMenu::FromHandle(m_hMenuDefault); old->DestroyMenu(); SetMenu(&mnu); this->m_hMenuDefault = mnu.m_hMenu; Create(NULL, "Mein MFC-Fenster"); }Hat nur ein Standart-Fehlermeldungs-Fenster von WIndows zur Folge...
-
Dein Code ist vollkommen falsch. SetMenu auszuführen bevor ein Fenster da ist muss in die Hose gehen.
Weißt Du eigentlich für was m_hMenuDefualt ist? Hier geht es um MDI...Evtl. solltest Du einfach mal mit den alten Tutorials weiter machen und Dir erst mal ein paar weitere Basics aneignen.
-
Dass es sich bei m_hMenuDefault um MDI handelt, wusste ich nicht.
> Evtl. solltest Du einfach mal mit den alten Tutorials weiter machen und Dir
> erst mal ein paar weitere Basics aneignen.Naja, z.B. das ganze Message-Map-Gedöhns für Reaktion ist mir bekannt, genauso wie die Steuerelemente (wird im Tutorial auch noch hart gecoded), sehr viel anders als wxWidgets ist es ja nicht. Das Problem ist, dass es bei Menus dann auffhört, z.B. hier: http://home.wtal.de/ranzurmall/visualc/
Da geht's sofort in den Ressourcen-Editor, ich will mir aber (noch nicht) von VS alles programmieren lassen. Das zum heulen, dass es da nichts gibt.
-
Ja, das vermisse ich an der MFC auch... Unter wxWidgets kann man alles "selber machen", bei MFC bist du von vorn herein an den Ressource-Editor gekettet, da es eigentlich keine Lektüre mehr dazu gibt, wie man MFC auch ohne den Resource-Editor von VS coden kann. Naja, schade, ich bleib bei wxWidgets.
Edit: ich sehe gerade: Im Buch Jetzt lerne ich Visual C++ steht:
Wenn man Menüs z.B. dynamisch erstellen möchte, kann man auch die Klasse CMenu verwenden.
Und was ist, wenn man z.B. den Menus ein modernes .NET-Skin verpassen will? (.NET lernen
) oder sich eine externe Lib nehmen, aber bevor man da den ganzen von VS erstellten Code modifieziert hat, vergehen Jahre...
-
Die Menüs der MFC kannst Du Dir auch anpassen lassen, dazu werden auch die Message und Command-Handler verwendet. Das Grundgerüst baut jedoch immer auf Ressourcen auf.
Und warum auch nicht.
Wenn Du unbedingt willst, dann bau Dir einen OnCreate Handler, erzuege Dir ein CMenu fürge die Menüs ein und setze dann das Menü mit SetMenu.Der Sinn dieser Übung entgeht mir jedoch völlig.
Für was gibt es die elegante Form von Ressourcen?
Deswegen macht VS doch nicht alles für einen.Selbst mit purer Win API Habe ich meine Menüs im Ressourcen Editor aufgebaut.