Implementing a Dialog Box
Es gibt zwei Möglichkeiten, ein Dialogfeld dem ATL-Projekt hinzuzufügen: verwenden Sie den ATL-Dialogfeld-Assistenten oder fügen Sie ihn manuell hinzu.
Hinzufügen eines Dialogfelds mit dem ATL-Dialogfeld-Assistenten
In Fügen Sie Klassendialogfeld hinzu wählen Sie das ATL-Dialogfeld-Objekt aus, um ein Dialogfeld dem ATL-Projekt hinzuzufügen. Fügen Sie den ATL-Dialogfeld-Assistenten bzw. aus und klicken Sie auf Fertig stellen. Der Assistent fügt eine Klasse hinzu, die von CAxDialogImpl dem Projekt abgeleitet wird. Öffnen Sie die Ressourcenansicht aus dem Menü Ansicht, suchen Sie das Dialogfeld und doppelklicken Sie darauf, um es im Ressourcen-Editor zu öffnen.
Hinweis
Wenn das Dialogfeld von CAxDialogImpl abgeleitet ist, kann es ActiveX- und Windows-Steuerelemente hosten.Wenn Sie nicht den Aufwand der ActiveX-Steuerelement-Unterstützung in der Dialogfeldklasse soll, verwenden Sie CSimpleDialog oder CDialogImpl stattdessen.
Meldung und Ereignishandler können in der Dialogfeldklasse in der Klassenansicht hinzugefügt werden. Weitere Informationen finden Sie unter Hinzufügen eines ATL-Meldungshandlers.
Ein Dialogfeld manuell hinzufügen
Ein Dialogfeld zu implementieren ist zum Implementieren eines Fensters ähnlich. Sie leiten eine Klasse entweder von CAxDialogImpl, von CDialogImpl oder von CSimpleDialog und deklarieren Meldungszuordnung zu den Handlemeldungen. Sie müssen jedoch Dialogfeldvorlagenressourcen-ID in der abgeleiteten Klasse auch angeben. Die Klasse muss einen Datenmember verfügen, der IDD aufgerufen wird, damit dieser Wert aufzunehmen.
Hinweis
Wenn Sie ein Dialogfeld mithilfe des ATL-Dialogfeld-Assistenten erstellen, fügt der Assistent automatisch den IDD-Member als enum-Typ hinzu.
CDialogImpl ermöglicht es Ihnen, ein modales oder ein nicht modales Dialogfeld implementieren, das Windows-Steuerelemente hostet. CAxDialogImpl ermöglicht es Ihnen, ein modales oder ein nicht modales Dialogfeld implementieren, das ActiveX- und Windows-Steuerelemente hostet.
Um ein modales Dialogfeld zu erstellen, erstellen Sie eine Instanz aus dem CDialogImpl von abgeleitete (oder CAxDialogImpl- Klasse abgeleitet) und dann die DoModal-Methode auf. Um ein modales Dialogfeld zu schließen, rufen Sie die Methode von einem EndDialog Meldungshandler auf. Um ein nicht modales Dialogfeld zu erstellen, rufen Sie die Methode anstelle Erstellen SieDoModal auf. Um ein nicht modales Dialogfeld zu zerstören, rufen Sie DestroyWindow auf.
Das Verringern von Ereignissen wird automatisch in CAxDialogImpl durchgeführt. Implementieren Sie die Meldungshandler des Dialogfelds, wie Sie die Handler in CWindowImpl von abgeleitete Klasse wurden. Wenn eine der meldungsspezifischen Rückgabewert gibt, geben Sie ihn als LRESULT zurück. Die zurückgegebenen LRESULT-Werte werden von ATL für eine ordnungsgemäße Behandlung durch den Windows-Dialogfeldmanager zugeordnet. Details finden Sie den Quellcode für CDialogImplBaseT::DialogProc 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*/);
};