Implementowanie okna dialogowego
Istnieją dwa sposoby dodawania okna dialogowego do projektu ATL: użyj Kreatora okna dialogowego ATL lub dodaj je ręcznie.
Dodawanie okna dialogowego za pomocą Kreatora okna dialogowego ATL
W oknie dialogowym Dodawanie klasy wybierz obiekt okna dialogowego ATL, aby dodać okno dialogowe do projektu ATL. Wypełnij odpowiednie okno dialogowe ATL, a następnie kliknij przycisk Zakończ. Kreator dodaje do projektu klasę pochodną CAxDialogImpl . Otwórz widok zasobu z menu Widok, znajdź okno dialogowe i kliknij go dwukrotnie, aby otworzyć go w edytorze zasobów.
Uwaga
Jeśli okno dialogowe pochodzi z CAxDialogImpl
programu , może hostować zarówno kontrolki ActiveX, jak i Windows. Jeśli w klasie okna dialogowego nie potrzebujesz narzutu obsługi kontrolek ActiveX, zamiast tego użyj CSimpleDialog lub CDialogImpl .
Programy obsługi komunikatów i zdarzeń można dodać do klasy okna dialogowego z widoku klasy. Aby uzyskać więcej informacji, zobacz Dodawanie programu obsługi komunikatów ATL.
Ręczne dodawanie okna dialogowego
Implementowanie okna dialogowego jest podobne do implementowania okna. Klasa pochodzi z klasy CAxDialogImpl, CDialogImpl lub CSimpleDialog i deklaruje mapę komunikatów do obsługi komunikatów. Należy jednak również określić identyfikator zasobu szablonu okna dialogowego w klasie pochodnej. Klasa musi mieć składową danych o nazwie IDD
, aby przechowywać tę wartość.
Uwaga
Po utworzeniu okna dialogowego przy użyciu Kreatora okna dialogowego ATL kreator automatycznie dodaje IDD
element członkowski jako enum
typ.
CDialogImpl
umożliwia zaimplementowanie modalnego lub moderowego okna dialogowego, które hostuje kontrolki systemu Windows. CAxDialogImpl
Umożliwia zaimplementowanie modalnego lub moderowego okna dialogowego, które hostuje zarówno kontrolki ActiveX, jak i Windows.
Aby utworzyć modalne okno dialogowe, utwórz wystąpienie klasy -pochodnej (lub -pochodnejCDialogImpl
), a następnie wywołaj metodę DoModal.CAxDialogImpl
Aby zamknąć modalne okno dialogowe, wywołaj metodę EndDialog z programu obsługi komunikatów. Aby utworzyć okno dialogowe bez moderowania, wywołaj metodę Create zamiast DoModal
. Aby zniszczyć okno dialogowe bez moderowania, wywołaj metodę DestroyWindow.
Zdarzenia ujścia są wykonywane automatycznie w aplikacji CAxDialogImpl. Zaimplementuj programy obsługi komunikatów okna dialogowego, tak jak programy obsługi w CWindowImpl
klasie -pochodnej. Jeśli istnieje wartość zwracana specyficzna dla komunikatu, zwróć ją jako LRESULT
wartość . Zwrócone wartości są mapowane LRESULT
przez ATL w celu prawidłowej obsługi przez menedżera okien dialogowych. Aby uzyskać szczegółowe informacje, zobacz kod źródłowy CDialogImplBaseT::D ialogProc w pliku atlwin.h.
Przykład
Poniższa klasa implementuje okno dialogowe:
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*/);
};