Ich habe einen neuen Dialog und seine Steuerelemente in einer bereits vorhandenen Ressourcendatei definiert. Ich habe auch eine neue Datei erstellt, die die Ereignisse aus diesem Dialog behandelt. Aber ich bin nicht sicher, wie man diese zwei verbindet.
Ist die Anweisung enum { IDD=IDD_NEW_DIALOG };
alles, was benötigt wird, um die beiden zu verbinden? Oder sollten wir eine andere Aussage hinzufügen?
Wie dies normalerweise in MFC getan wird, besteht darin, eine Dialogvorlage im Ressourceneditor zu definieren (wie Sie es getan haben), dann in C ++ eine Klasse von CDialog abzuleiten und sie der Dialogvorlage zuzuordnen (die wie Sie klingt) habe getan - es ist nicht ganz klar).
Was die beiden eigentlich verbindet, ist der Konstruktor für Ihren CDialog-Code. Wenn Sie dialogbezogenen Code betrachten, der vom MFC-Klassenassistenten automatisch generiert wird, sehen Sie in der Konstruktorimplementierung etwa Folgendes:
%Vor%Dabei ist CMyDlg :: IDD als Aufzählung mit einem Wert der Kennung Ihrer neuen Dialogvorlage definiert. Das macht alles möglich, nicht die Deklaration des Enums. Sie könnten es zu
ändern %Vor%und es funktioniert immer noch (vorausgesetzt, IDD_NEW_DIALOG ist die Vorlagen-ID Ihres Dialogs in den Ressourcen), da die Dialog-ID nur an den Konstruktor übergeben wird.
Im Allgemeinen ist es immer wichtig, sich daran zu erinnern, dass MFC trotz anfänglicher Erscheinungen nicht durch Kompilierungszauber an Windows gebunden ist - es ist alles mit C ++ und ein paar Makros erledigt.
BEARBEITEN: DIALOGEX und DIALOG deklarieren leicht unterschiedliche Dialogressourcenformate, die Windows versteht: Ersteres ist neuer als letzteres. Allerdings gibt es beide seit mindestens Windows 95, also ist es kein sehr wichtiger Unterschied.
Das ist alles, was benötigt wird, wenn Sie den Dialog über die Dialogklasse erstellen ( DoModal()
, oder Create
für einen nicht-modalen Dialog), was normalerweise der Fall ist.
Sie müssen natürlich von CDialog ableiten und eine Nachrichtenzuordnung hinzufügen, um die Nachrichten an Ihre ewvent-Funktionen weiterzuleiten.