Implementace dialogového okna
Existují dva způsoby, jak přidat dialogové okno do projektu ATL: použijte Průvodce dialogem ATL nebo ho přidejte ručně.
Přidání dialogového okna pomocí Průvodce dialogem ATL
V dialogovém okně Přidat třídu vyberte objekt dialogového okna ATL pro přidání dialogového okna do projektu ATL. Podle potřeby vyplňte Průvodce dialogem ATL a klepněte na tlačítko Dokončit. Průvodce přidá do projektu třídu odvozenou z CAxDialogImpl . Otevřete zobrazení zdrojů z nabídky Zobrazení, vyhledejte dialogové okno a poklikáním ho otevřete v editoru prostředků.
Poznámka:
Pokud je vaše dialogové okno odvozeno z CAxDialogImpl
, může hostovat ovládací prvky ActiveX i Windows. Pokud nechcete mít režii ovládacích prvků ActiveX ve třídě dialogového okna, použijte místo toho CSimpleDialog nebo CDialogImpl .
Obslužné rutiny zpráv a událostí lze přidat do třídy dialogového okna ze zobrazení třídy. Další informace naleznete v tématu Přidání obslužné rutiny zpráv ATL.
Ruční přidání dialogového okna
Implementace dialogového okna je podobná implementaci okna. Odvozujete třídu z CAxDialogImpl, CDialogImpl nebo CSimpleDialog a deklarujete mapu zpráv pro zpracování zpráv. Musíte však také zadat ID prostředku šablony dialogového okna v odvozené třídě. Aby vaše třída měla tuto hodnotu, musí mít volaný IDD
datový člen.
Poznámka:
Když vytvoříte dialogové okno pomocí Průvodce dialogem ATL, průvodce automaticky přidá člena IDD
enum
jako typ.
CDialogImpl
umožňuje implementovat modální nebo bezmodální dialogové okno, které je hostitelem ovládacích prvků Windows. CAxDialogImpl
umožňuje implementovat modální nebo bezmodální dialogové okno, které je hostitelem ovládacích prvků ActiveX i Windows.
Chcete-li vytvořit modální dialogové okno, vytvořte instanci - CDialogImpl
odvozené (nebo CAxDialogImpl
-odvozené) třídy a pak volejte DoModal metoda. Chcete-li zavřít modální dialogové okno, volejte metodu EndDialog z obslužné rutiny zprávy. Chcete-li vytvořit bezmodální dialogové okno, volejte metodu Create místo DoModal
. Chcete-li zničit bezmodální dialogové okno, zavolejte DestroyWindow.
Události jímky se automaticky provádějí v CAxDialogImpl. Implementujte obslužné rutiny zpráv dialogového okna stejně jako obslužné rutiny v odvozené CWindowImpl
třídě. Pokud existuje návratová hodnota specifická pro zprávu, vraťte ji jako LRESULT
. Vrácené LRESULT
hodnoty mapuje ATL pro správné zpracování správcem dialogových oken Systému Windows. Podrobnosti najdete ve zdrojovém kódu pro CDialogImplBaseT::D ialogProc v atlwin.h.
Příklad
Následující třída implementuje dialogové okno:
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*/);
};