MFC Verbindung eines Dialogs mit einer Dialogklasse

8

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?

    
Raghu 08.12.2008, 06:39
quelle

3 Antworten

14

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.

    
DavidK 08.12.2008, 10:29
quelle
1

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.

    
peterchen 08.12.2008 06:43
quelle
0

Verwenden Sie den Klassenassistenten, um eine Klasse für neu erstellte Dialoge zu erstellen. Strg + W ist der Tastenkürzel aus der UI-Ressourcenansicht.

    
yesraaj 08.12.2008 06:43
quelle

Tags und Links