Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog RSS

Serialisierung


Selbstgeschriebende Klasse GraphicsObject ist "serialisierbar": Erbt von CObject. IMPLEMENT_SERIAL, DECLARE_SERIAL. Methode Serialize() wird automatisch aufgerufen. Geschriebene Dateien mal mit Texteditor ansehen: Zusatzinfos.

CObList: Verwaltet dynamische Liste, hier von Zeigern auf Grafikobjekte. Leitet (selbstverständlich) die Serialisierung an enthaltene Objekte weiter.
 

Ressources, Teil 1: Menüs


Erweiterung des handgemachten MFC-Programms (Standard-Win32-Anwendungsprojekt) um ein Menü: Mit Datei/Neu/Ressourcenskript eine .rc-Datei.rc im Projekt anlegen.

Darin mit Einfügen/Ressource/Menu eine Menüvorlage erzeugen und dort Inhalt zusammenklicken (Doppelklick auf leeren Eintrag für neues Menü oder neuen Eintrag; Doppelklick auf bestehenden Eintrag zum Editieren; Umsortieren duch Ziehen). Statuszeilentext und ID vergeben (ID automatisch vorbelegt!). & im Namen für Alt-Tastaturkürzel. Trennlinen. "Popup" anwählen für Untermenü. Die .rc-Datei mit Texteditor ansehen: Quasi-Programm.

Compilerlauf erzeugt .res-Datei (wird in EXE-Datei gelinkt) und extrahiert eine Headerdatei resoure.h für C/C++. Die enthält #define-Befehle für die ID-Nummern und ihre Namen. Bindet man resource.h in den C/C++-Code ein, kann man einfach die symbolischen Namen verwenden. Die generierten Nummern kann man in resource.h die zunächst automatisch generierten ID-Nummern editieren.

Automatisch erzeugte Namensvorsilben der ID-Bezeichner: IDC_XYZ: ein Control, IDD_xyz: ein Dialog, ID_xyz_uvw: Menüeintrag im Menü xyz, IDR_xyz: gesamte Menü-Ressource.

Laden der Menüs in ein Fenster mit Create(...MAKEINTRESOURCE(...)).

Verdrahten der Messages an Funktionen per ON_COMMAND, ON_COMMAND_RANGE in der Message Table. Nicht "verdrahtete" Menüeinträge sind automatisch grau und nicht zu wählen, dadurch weniger Probleme bei Prototyping.

Grauschalten, Häkchen, Punkte für Menüeinträge mit ON_UPDATE_COMMAND_UI oder ...RANGE: wird vor Öffnen für jeden angegebenen Eintrag einzeln aufgerufen.

Kontextmenü (= Mausklick rechts) resultiert in ON_WM_CONTEXTMENU, hier verdrahtet mit OnContextMenu(...)