Среда, 08.01.2025, 20:45
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » Visual C++ и MFC

Класс диалогового окна CDialog
Класс диалогового окна CDialog<

В данном разделе ваc ждет знакомство с классом CDialog. Он служит для создания диалоговых окон и работы с ними. Ну-с приступим к близкому контакту!

Изучение любого класса иерархии MFC лучше всего начинать со знакомства с предками ( т.е. желательно увидеть, что унаследовал данный класс ). Кстати, вполне естественное желание, а вдруг у него плохая наследственность?!

Генеалогическое дерево:

Для приведенного выше древа можно сделать следующие выводы:

  1. CDialog - класс, производный от CObject.
  2. Он наследуется от 3-х классов. Отсюда следует вывод, что он получает в наследство все открытые и защищенные члены своих базовых классов. Например, функции-члены и данные-члены класса CWnd.

Прежде чем перейти к устройству CDialog необходимо сказать несколько слов о том какие бывают диалоги. В Windows диалоги бывают 2-х типов - модальные и немодальные. А в чем же разница?

  1. Модальный диалог не позволяет перейти на другие окна приложения до тех пор пока он не будет закрыт. Говоря по-научному модальный диалог отсекает поток сообщений, идущих от мыши и клавиатуры к его родительским окнам или окнам того же уровня, делая их недоступными.
  2. Немодальный диалог позволяет переключаться на другие окна приложения. Он не пресекает поток сообщений, идущих в любую часть вашей программы.

А теперь к делу! Тело на операционный стол!

Приступим к препарированию CDialog.

Конструкторы:

CDialog( ); Конструктор без параметров
CDialog( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
 lpszTemplateName - указатель на символьную строку, содержащую 
 имя шаблона.
 pParentWnd - указатель на объект родителя или владельца, 
 которому принадлежит объект диалога. Если он равен NULL, 
 то родительским окном является основное окно приложения.
CDialog( UINT nIDTemplate, CWnd* pParentWnd = NULL );
 nIDTemplate - номер идентификатора ресурса диалога.
 pParentWnd - имеет тоже самое значение, что и в предыдущем 
 конструкторе. 

Функции-члены:

BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
 Обе формы этой функции создают немодальный диалог на основе 
 шаблона, находящегося в файле ресурсов.
 Если создание и инициализация прошли успешно, то возвращаемое из
 функции значение не ноль, иначе ноль.
 Параметры:
 Параметры, передаваемые в функцию имеют тоже значение, что и 
 для конструктора.
Примечание: 
 Для того чтобы создать немодальный диалог необходимо
 будет воспользоваться конструктором без параметров.
BOOL CreateIndirect( LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL ); BOOL CreateIndirect( HGLOBAL hDialogTemplate, CWnd* pParentWnd = NULL ); Эта функция создает немодальный диалог на основе шаблона, находящегося в памяти. Если создание и инициализация прошли успешно то возвращаемое из функции значение не ноль, иначе ноль. Параметры: lpDialogTemplate - указатель на участок памяти, содержащий шаблон диалога.А теперь в стиле MFC - это указатель на константную структуру DLGTEMPLATE, в которой находится шаблон диалога. pParentWnd - смотри описание параметров конструктора. hDialogTemplate - дескриптор глобальной памяти, где определены структура DLGTEMPLATE и данные для каждого элемента управления. BOOL InitModalIndirect( LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL ); BOOL InitModalIndirect( HGLOBAL hDialogTemplate, CWnd* pParentWnd = NULL ); Эта функция создает модальный диалог на основе шаблона, находящегося в памяти. Значение параметров такое же как и для функции CreateIndirect. Тоже самое можно сказать и о возвращаемом значение. virtual int DoModal( ); Показывает на экран модальный диалог. Программа не выходит из данной функции до тех пор пока диалог не закрыт. Возвращаемое значение равно параметру nResult, который был передан в функцию класса диалога EndDialog( c этой функцией вы познакомитесь ниже, она используется для закрытия диалога.) Например, это может быть константа IDOK или IDCANCEL. Если вернулось значение -1 значит функция DoModal не может создать модальный диалог и показать его на экран, если IDABORT, то произошла какая-другая ошибка. void MapDialogRect( LPRECT lpRect ) const; Получает на входе размеры и координаты диалога через указатель lpRect ( в системе координат диалога ) и заменяет значения в соответствующих полях на экранные координаты. void NextDlgCtrl( ) const; Перемещает фокус на следующий элемент управления в диалоге. Если достигнут последний, то он перемещает его на первый элемент управления. void PrevDlgCtrl( ) const; Перемещает фокус на предыдущий элемент управления в диалоге. Если достигнут первый, то он перемещает его на последний элемент управления. void GotoDlgCtrl( CWnd* pWndCtrl ); Перемещает фокус на заданный элемент управления. Он задается с помощью параметра pWndCtrl. pWndCtrl - указатель на окно ( элемент управления ), который должен получить фокус. void SetDefID( UINT nID ); Меняет кнопку по умолчанию для диалога. nID - идентификатор новой кнопки по умолчанию. DWORD GetDefID( ) const; Возвращает ID кнопки по умолчанию для диалога. void SetHelpID( UINT nIDR ); Устанавливает ID для кнопки помощи диалога. nIDR - идентификатор кнопки помощи. void EndDialog( int nResult ); Закрывает модальный диалог. nResult - значение, которое будет возвращено для обьекта диалога из функции DoModal.

Переопределяемые Функции-члены:

virtual BOOL OnInitDialog( );
 Вы уже создавали обработчик сообщения WM_INITDIALOG.
 Он вызывается перед показом на экран диалога. Подробности можно 
 прочитать в предыдущем уроке.

virtual void OnOK( );
 Если у вас возникла необходимость создать свой обработчик 
 нажатия на кнопку OK ( кнопка с идентификатором равным IDOK ), 
 тогда вам нужно переопределить данную функцию.
 Она вызывается при нажатии кнопки OK или ENTER на 
 клавиатуре. 

virtual void OnCancel( );
 Если у вас возникла необходимость создать свой обработчик 
 нажатия на кнопку CANCEL ( кнопка с идентификатором равным 
 IDCANCEL ), тогда вам нужно переопределить данную функцию.
 Она вызывается при нажатии кнопки CANCEL или ESCAPE на 
 клавиатуре. 
 

Вот и состоялось первое свидание с CDialog. В будущем вы ёще не один раз встретитесь с ним и его функциями.

Категория: Visual C++ и MFC | Добавил: slava (26.09.2009)
Просмотров: 5027 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]