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 CAxDialogImpl
abgeleitet 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 CDialogImpl
abgeleiteten (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 CWindowImpl
abgeleiteten 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*/);
};