Implementieren eines Dialogfelds

Es gibt zwei Möglichkeiten zum Hinzufügen eines Dialogfelds zu Ihrem ATL-Projekt: Verwenden Sie den ATL-Dialogfeld-Assistenten, oder fügen Sie es manuell hinzu.

Hinzufügen eines Dialogfelds mit dem ATL-Dialogfeld-Assistenten

Wählen Sie im Dialogfeld "Klasse hinzufügen" das ATL Dialog-Objekt aus, um Ihrem ATL-Projekt ein Dialogfeld hinzuzufügen. Füllen Sie den ATL-Dialogfeld-Assistenten entsprechend aus, und klicken Sie auf " Fertig stellen". Der Assistent fügt ihrem Projekt eine von CAxDialogImpl abgeleitete Klasse hinzu. Öffnen Sie die Ressourcenansicht im Menü "Ansicht", suchen Sie das Dialogfeld, und doppelklicken Sie darauf, um sie im Ressourcen-Editor zu öffnen.

Hinweis

Wenn Ihr Dialogfeld von CAxDialogImplabgeleitet ist, kann es sowohl ActiveX- als auch Windows-Steuerelemente hosten. Wenn Sie nicht möchten, dass die Unterstützung des ActiveX-Steuerelements in Ihrer Dialogfeldklasse unterstützt wird, verwenden Sie stattdessen CSimpleDialog oder CDialogImpl .

Nachrichten- und Ereignishandler können ihrer Dialogklasse aus der Klassenansicht hinzugefügt werden. Weitere Informationen finden Sie unter Hinzufügen eines ATL-Nachrichtenhandlers.

Manuelles Hinzufügen eines Dialogfelds

Das Implementieren eines Dialogfelds ähnelt der Implementierung eines Fensters. Sie leiten eine Klasse von CAxDialogImpl, CDialogImpl oder CSimpleDialog ab und deklarieren eine Nachrichtenzuordnung zum Verarbeiten von Nachrichten. Sie müssen jedoch auch eine Ressourcen-ID für Dialogvorlagen in Ihrer abgeleiteten Klasse angeben. Ihre Klasse muss über ein Datenmememm verfügen, das aufgerufen IDD wird, um diesen Wert aufzunehmen.

Hinweis

Wenn Sie ein Dialogfeld mithilfe des ATL-Dialogfeld-Assistenten erstellen, fügt der Assistent das IDD Element automatisch als Typ hinzu enum .

CDialogImpl ermöglicht Es Ihnen, ein modales oder ein modusloses Dialogfeld zu implementieren, in dem Windows-Steuerelemente gehostet werden. CAxDialogImpl ermöglicht ihnen, ein modales oder ein modusloses Dialogfeld zu implementieren, in dem sowohl ActiveX- als auch Windows-Steuerelemente gehostet werden.

Um ein modales Dialogfeld zu erstellen, erstellen Sie eine Instanz ihrer CDialogImplabgeleiteten (oder CAxDialogImpl-abgeleiteten) Klasse, und rufen Sie dann die DoModal-Methode auf. Rufen Sie die EndDialog-Methode aus einem Nachrichtenhandler auf, um ein modales Dialogfeld zu schließen. Rufen Sie zum Erstellen eines Dialogfelds ohne Modus die Create-Methode anstelle von DoModal. Rufen Sie "DestroyWindow" auf, um ein Dialogfeld ohne Modus zu zerstören.

Das Abfangen von Ereignissen erfolgt automatisch in CAxDialogImpl. Implementieren Sie die Meldungshandler des Dialogfelds wie die Handler in einer CWindowImplabgeleiteten Klasse. Wenn ein nachrichtenspezifischer Rückgabewert vorhanden ist, geben Sie ihn als ein LRESULT. Die zurückgegebenen LRESULT Werte werden von ATL zur ordnungsgemäßen Behandlung durch den Windows-Dialog-Manager zugeordnet. Ausführliche Informationen finden Sie im Quellcode für CDialogImplBaseT::D ialogProc in atlwin.h.

Beispiel

Die folgende Klasse implementiert ein Dialogfeld:

class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
   enum { IDD = IDD_MYDLG };

   BEGIN_MSG_MAP(CMyDialog)
      MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
      COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnBnClickedCancel)
   END_MSG_MAP()

   LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // Do some initialization code
      return 1;
   }
public:
   LRESULT OnBnClickedCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
};

Siehe auch

Fensterklassen