HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Главная » Статьи » Visual C++ и MFC |
В данном разделе ваc ждет знакомство с классом CDialog. Он служит для создания диалоговых окон и работы с ними. Ну-с приступим к близкому контакту! Изучение любого класса иерархии MFC лучше всего начинать со знакомства с предками ( т.е. желательно увидеть, что унаследовал данный класс ). Кстати, вполне естественное желание, а вдруг у него плохая наследственность?! Генеалогическое дерево:Для приведенного выше древа можно сделать следующие выводы:
Прежде чем перейти к устройству CDialog необходимо сказать несколько слов о том какие бывают диалоги. В Windows диалоги бывают 2-х типов - модальные и немодальные. А в чем же разница?
А теперь к делу! Тело на операционный стол! Конструкторы: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. В будущем вы ёще не один раз встретитесь с ним и его функциями. | |
Просмотров: 5027 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |