Шаблон диалога ID DIALOGEX X, Y, Width, Height Характеристики BEGIN Элементы окна END
Параметры шаблона диалога ID – идентификатор диалогового окна X, Y – координаты верхнего левого угла Width, Height – ширина и высота окна Характеристики – стиль, заголовок, шрифтовой комплект Элементы окна – определения элементов управления
Пример диалога из файла ресурсов IDD_DEL DIALOGEX 0, 0, 119, 159 STYLE DS_MODALFRAME | WS_CAPTION "Удаление" FONT 8, "MS Shell Dlg", 400, 0, 0 x 1 BEGIN LISTBOX IDC_LIST, 18, 39, 83, 91, LBS_SORT DEFPUSHBUTTON "OK", IDOK, 7, 138, 50, 14 PUSHBUTTON "Cancel", IDCANCEL, 62, 138, 50, 14 END
Класс диалога… <- CDialog <- CWnd Cоздать класс диалога Add Class… Добавить члены-данные Add Variable… Добавить обработчиков: выделить во вкладке Class View класс диалога в окне Properties нажать пиктограмму Events выделить идентификатор извещения и добавить метод
…Класс диалога <- CDialog <- CWnd Переопределить метод On. Init. Dialog ( ) выделить во вкладке Class View класс диалога в окне Properties нажать пиктограмму Overrides в соседней строке метода On. Init. Dialog ( ) выбрать <Add> On. Init. Dialog ( ) Добавить (в метод обработки сообщения объектом представления) создание объекта диалога и его вызов
Вызов и закрытие диалогового окна virtual int CDialog : : Do. Modal ( ) ; Не завершается, пока диалог не закрыт. Диалог закрывается по IDCANCEL или IDOK. Класс CDialog содержит встроенные обработчики: On. Cancel ( ) On. OK ( ) Обработчика IDCANCEL не нужно включать в карту сообщений.
Кнопки – CButton
Редактор текста – CEdit
Список – CList. Box
Комбинированный писок – CCombo. Box
Спецификация диалога #include "ISDoc. h" class CDel : public Cdialog { public: CDel(CISDoc* p. Doc, CWnd* p. Parent = NULL); protected: CISDoc* m_p. Doc ; DECLARE_MESSAGE_MAP() public: CList. Box m_list. Box; virtual BOOL On. Init. Dialog(); afx_msg void On. Lbn. Dblclk. List(); };
Карта сообщений BEGIN_MESSAGE_MAP(CDel, CDialog) ON_LBN_DBLCLK(IDC_LIST, &CDel: : On. Lbn. Dblclk. List) ON_BN_CLICKED(IDOK, &CDel: : On. Lbn. Dblclk. List) END_MESSAGE_MAP()
Реализация конструктора CDel: : CDel (CISDoc* p. Doc, CWnd* p. Parent /*=NULL*/) : CDialog(CDel: : IDD, p. Parent) , m_p. Doc (p. Doc) { }
Инициализация диалога BOOL CDel: : On. Init. Dialog() { CDialog: : On. Init. Dialog(); int n = m_p. Doc->m_p. Ctrl->get. N() ; long pos (0 L) ; while ( n ) { m_list. Box. Add. String (m_p. Doc->m_p. Ctrl-> get. Rec(pos)->get. Model()) ; n-- ; pos = -1 L ; } m_list. Box. Set. Cur. Sel (0) ; return TRUE; }
Обработчик void CDel: : On. Lbn. Dblclk. List() { int ind = m_list. Box. Get. Cur. Sel(); if (ind != LB_ERR && m_list. Box. Get. Count() > 0) { char todel [60] ; m_list. Box. Get. Text(ind, todel) ; m_p. Doc->m_p. Ctrl->del(todel); m_p. Doc->Set. Modified. Flag(); m_list. Box. Delete. String(ind); --ind; if (ind < 0) ind = 0; m_list. Box. Set. Cur. Sel(ind); if (! m_list. Box. Get. Count()) On. Cancel () ; } }
В карте сообщений Представления ON_COMMAND(IDM_DEL, &CISView: : On. Del) ON_UPDATE_COMMAND_UI(IDM_DEL, &CISView: : On. Update. Del)
Обработчик ON_COMMAND void CISView: : On. Del() { CDel dlg (Get. Document()) ; dlg. Do. Modal(); }
Обработчик ON_UPDATE_COMMAND_UI void CISView: : On. Update. Del (CCmd. UI *p. Cmd. UI) { p. Cmd. UI -> Enable (check()) ; } bool CISView : : check ( ) { if ( ! Get. Document ( ) -> m_is. Open ) return false ; if ( ! Get. Document ( ) -> m_p. Ctrl -> get. N ( )) return false ; return true ; }
Открытие файла (C…Doc) BOOL CISDoc: : On. Open. Document (LPCTSTR lpsz. Path. Name) { //if(!CDocument: : On. Open. Document(lpsz. Path. Name)) // return FALSE; if (!m_p. Ctrl->open(lpsz. Path. Name)) return FALSE ; m_is. Open = true ; Set. Path. Name(lpsz. Path. Name) ; Update. All. Views(NULL) ; return TRUE; }
Сохранение файла (C…Doc) BOOL CISDoc: : On. Save. Document(LPCTSTR lpsz. Path. Name) { m_p. Ctrl->save() ; Set. Modified. Flag(false) ; if (!m_p. Ctrl->open(lpsz. Path. Name)) return FALSE ; m_is. Open = true ; //return CDocument: : On. Save. Document(lpsz. Path. Name); return CDocument: : Save. Modified(); }