Поделиться через


Реализация диалогового окна

В проект ATL можно добавить диалоговое окно двумя способами: использовать мастер диалоговых окон ATL или добавить его вручную.

Добавление диалогового окна с помощью мастера диалогового окна ATL

В диалоговом окне "Добавление класса" выберите объект диалогового окна ATL, чтобы добавить диалоговое окно в проект ATL. Заполните мастер диалогового окна ATL соответствующим образом и нажмите кнопку "Готово". Мастер добавляет в проект класс, производный от CAxDialogImpl . Откройте представление ресурсов в меню "Вид", найдите диалоговое окно и дважды щелкните его, чтобы открыть его в редакторе ресурсов.

Примечание.

Если диалоговое окно является производным, CAxDialogImplоно может размещать элементы activeX и элементы управления Windows. Если вам не нужна поддержка элементов activeX в классе диалогового окна, используйте CSimpleDialog или CDialogImpl.

Обработчики сообщений и событий можно добавить в класс диалогов из представления классов. Дополнительные сведения см. в разделе "Добавление обработчика сообщений ATL".

Добавление диалогового окна вручную

Реализация диалогового окна аналогична реализации окна. Вы наследуете класс из CAxDialogImpl, CDialogImpl или CSimpleDialog и объявляете карту сообщений для обработки сообщений. Однако необходимо также указать идентификатор ресурса шаблона диалогового окна в производном классе. Класс должен иметь член данных, вызываемый IDD для хранения этого значения.

Примечание.

При создании диалогового окна с помощью мастера диалоговых окон ATL мастер автоматически добавляет IDD элемент в качестве enum типа.

CDialogImpl позволяет реализовать модальное или бессерверное диалоговое окно, в котором размещаются элементы управления Windows. CAxDialogImpl позволяет реализовать модальное или бессерверное диалоговое окно, в котором размещаются элементы управления ActiveX и Windows.

Чтобы создать модальное диалоговое окно, создайте экземпляр CDialogImplкласса-производного (или CAxDialogImplпроизводного), а затем вызовите метод DoModal . Чтобы закрыть модальное диалоговое окно, вызовите метод EndDialog из обработчика сообщений. Чтобы создать диалоговое окно без режима, вызовите метод Create вместо DoModal. Чтобы уничтожить диалоговое окно без режима, вызовите DestroyWindow.

События приемника автоматически выполняются в CAxDialogImpl. Реализуйте обработчики сообщений диалогового окна, как и обработчики в производном CWindowImplклассе. Если имеется возвращаемое значение для конкретного сообщения, верните его в качестве LRESULTзначения. Возвращаемые LRESULT значения сопоставляются ATL для правильной обработки диспетчером диалоговых окон Windows. Дополнительные сведения см. в исходном коде для CDialogImplBaseT::D ialogProc в atlwin.h.

Пример

Следующий класс реализует диалоговое окно:

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*/);
};

См. также

Классы окон