Udostępnij za pośrednictwem


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 CAxDialogImplprogramu , 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 CWindowImplklasie -pochodnej. Jeśli istnieje wartość zwracana specyficzna dla komunikatu, zwróć ją jako LRESULTwartość . 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*/);
};

Zobacz też

Klasy okien