Es gibt zwei Möglichkeiten, um das Dialogfeld ATL-Projekt hinzufügen: Verwenden Sie den Assistenten für ATL-Objekte oder manuell hinzufügen.
Markieren Sie in den ATL-Assistenten (MenüEinfügen , Befehl Neue ATL-Objekt ) das Kategorie Sonstiges im linken Bereich zu, und dann doppelklicken Sie auf das Dialog -Objekt im rechten Fensterausschnitt, um das Dialogfeld ATL-Projekt hinzufügen. Füllen Sie im Dialogfeld ATL Object Wizard Properties nach Bedarf und klicken Sie auf OK. Der ATL-Objekt-Assistent fügt eine Klasse zum Projekt von CAxDialogImpl abgeleitetes und öffnet den Ressource-Editor mit Ihrem Dialogfeld Feld Vorlage.
Hinweis&Nbsp; Wenn das Dialogfeld von CAxDialogImpl abgeleitet ist, kann es sowohl Windows als auch ActiveX-Steuerelemente hosten. Wenn Sie nicht, den Aufwand für das ActiveX-Steuerelement-Unterstützung in der Dialogfeldklasse möchten, stattdessen Sie CSimpleDialog oder CDialogImpl.
Nachricht und Ereignis-Handler können Ihrer Dialogfeldklasse auf die gleiche Weise wie für eine MFC-Klasse aus der Klassenansicht hinzugefügt werden. In ClassView mit der Maustaste der Klasse, und wählen Sie Windows-Meldungshandler hinzuzufügen , öffnen Sie das Dialogfeld neue Windows-Meldung und Ereignishandler . Weitere Informationen finden Sie unter Hinzufügen eines Meldungshandlers.
Öffnen Sie das Dialogfeld neue Windows-Nachricht und Ereignis-Handler aus dem Dialogfeld Feld Vorlage mit der rechten Maustaste ein Steuerelement in das Dialogfeld Feld Vorlage und wählen Sie den Ereignisse -Befehl aus dem Kontextmenü. In einem ATL-Projekt wird im Feld Klasse oder Objekt zum behandeln die Dialogfeldklasse hervorgehoben; für ein MFC-Projekt, das Steuerelement hervorgehoben wird, daß.
Implementieren eines Dialogfelds ähnelt implementieren eines Fensters. Sie leiten Sie eine Klasse von CAxDialogImpl, CDialogImploder CSimpleDialog und Deklarieren einer Meldungszuordnung Nachrichten verarbeiten. Allerdings müssen Sie auch eine Dialogfeld Vorlage Ressource-ID in der abgeleiteten Klasse angeben. Ihre Klasse muss einen Datenmember namens IDD um diesen Wert zu halten.
Hinweis&Nbsp; Wenn Sie ein Dialogfeld mit dem ATL-Objekt-Assistenten erstellen, fügt der Assistent automatisch die IDD Mitgliedstaaten als Enum -Typ.
CDialogImpl ermöglicht Sie implementieren ein modales oder nicht modales Dialogfeld, das Windows-Steuerelemente hostet. CAxDialogImpl können Sie implementieren ein modales oder nicht modales Dialogfeld, das sowohl Windows als auch ActiveX-Steuerelemente hostet.
Um ein modales Dialogfeld zu erstellen, erstellen Sie eine Instanz von Ihrem CDialogImpl-abgeleitete (oder CAxDialogImpl-abgeleitete) Klasse und dann die DoModal -Methode aufrufen. Um ein modales Dialogfeld zu schließen, rufen Sie einen Meldungshandler die EndDialog -Methode. Um ein nicht modales Dialogfeld zu erstellen, rufen Sie die Create -Methode anstelle von DoModal. Um ein nicht modales Dialogfeld zu zerstören, rufen Sie DestroyWindow auf.
Wenn Ihr Dialogfeld im Feld Objekt ActiveX-Steuerelemente enthält, und Sie werden Ereignisse aus diesen Steuerelementen behandeln, müssen Sie zu beraten und alle ActiveX-Steuerelementschnittstellen abmeldet. Dies kann durch das Hinzufügen der folgenden Codezeile auf Ihre InitDialog Funktion:
AtlAdviseSinkMap (pMyDlg, TRUE)
Um alle ActiveX-Steuerelemente abmeldet, fügen Sie die folgende Codezeile zu Ihrem EndDialog -Funktion (oder die Funktion aufgerufen, die nach Beendigung Ihrer Dialogfeldobjekt):
AtlAdviseSinkMap (pMyDlg, FALSE)
Das Dialogfeld Message Handler implementieren, wie Sie die Handler in einem CWindowImpl würden-abgeleitete Klasse. Wenn ein Message-spezifische Rückgabewert vorhanden ist, schicken Sie es als ein LRESULT . Der zurückgegebene LRESULT Werte von ATL für korrekte Handhabung von der Windows-Dialog-Manager zugeordnet sind. Weitere Informationen finden Sie im Quellcode für CDialogImplBaseT::DialogProc in atlwin.h.
Beispiel
Die folgende Klasse implementiert ein Dialogfeld:
klasse CMyDialog: öffentliche CDialogImpllt;CMyDialog >,...
{
Öffentliche:
Enum {IDD = IDD_MYDIALOG};
BEGIN_MSG_MAP(CMyDialog)
MESSAGE_HANDLER (WM_INITDIALOG, OnInitDialog)
END_MSG_MAP()
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/ / Do einige Initialisierung Code
1 zurück;
}
}