Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

2. Окна свойств

Окна свойств (диалоговые окна с закладками) часто используются в Windows для компактного представления большого количества ЭУ. Эти диалоговые окна реализованы в библиотеке стандартных ЭУ Windows 95. На уровне API для реализации окон свойств требуется довольно много усилий, которые существенно упрощаются при использовании MFC. Оказывается, что добавить окно свойств почти также легко, как и обычное диалоговое окно.

Окна свойств в MFC представлены двумя классами: CPropertySheet и CPropertyPage. CPropertySheet (унаследован от CWnd) представляет собственно окно свойств, а CPropertyPage (унаследован от CDialog) – отдельную страницу свойств. Оба класса описаны в файле Afxdlgs. h. Как и диалоговые окна, окна свойств могут быть модальными и немодальными. Модальное окно создается вызовом CPropertySheet::DoModal, а немодальное –CPropertySheet::Create.

Общий порядок создания модального окна свойств следующий:

1)  Для каждой страницы свойств надо создать отдельный шаблон диалогового окна, задающий содержимое и свойства страницы. Указанный в шаблоне заголовок окна будет выводиться как название закладки в окне свойств.

2)  Для каждой страницы свойств надо создать подкласс CPropertyPage, в котором, аналогично обычному диалоговому окну, можно завести открытые переменные-члены и связать их с ЭУ страницы с помощью DDX/DDV.

3)  Для представления окна свойств создается подкласс CPropertySheet. Для работы окна должны быть созданы объекты этого класса, а также объекты всех классов-страниц, определенных на шаге 2). Для добавления страниц в окно свойств следует пользоваться функцией CPropertySheet::AddPage.

НЕ нашли? Не то? Что вы ищете?

4)  Окно свойств выводится на экран вызовом его функции-члена DoModal.

Для упрощения создания окон свойств большинство программистов объявляют объекты страниц свойств как переменные-члены класса окна свойств. Эти объекты привязываются к окну свойств из конструктора вызовами AddPage для каждой страницы свойств. Пример подобной реализации окна свойств приведен ниже:

class CFirstPage : public CPropertyPage {

public:

CFirstPage() : CPropertyPage( IDD_FIRSTPAGE ) {;}

// Объявление переменных-членов CFirstPage

protected:

virtual void DoDataExchange( CDataExchange* );

};

class CSecondPage : public CPropertyPage {

public:

CSecondPage() : CPropertyPage( IDD_SECONDPAGE ) {;}

// Объявление переменных-членов CSecondPage

protected:

virtual void DoDataExchange( CDataExchange* );

};

class CMyPropertySheet : public CPropertySheet {

public:

CFirstPage m_firstPage; // Первая страница

CSecondPage m_secondPage; // Вторая страница

// Страницы добавляются в окно из конструктора

CMyPropertySheet( LPCTSTR pszCaption, CWnd* pParentWnd = NULL ) :

CPropertySheet( pszCaption, pParentWnd, 0 )

{

AddPage( &m_firstPage );

AddPage( &m_secondPage );

}

};

В данном примере страницы свойств представлены классами CFirstPage и CSecondPage. С ними связаны ресурсы шаблонов диалоговых окон с идентификаторами IDD_FIRSTPAGE и IDD_SECONDPAGE. При такой структуре классов окна свойств, вызвать его из приложения можно всего двумя операторами:

CMyPropertySheet ps( "Свойства" );

ps. DoModal();

Как и CDialog::DoModal, функция CPropertySheet::DoModal возвращает IDOK или IDCANCEL.

В шаблонах диалоговых окон для страниц свойств не должно быть кнопок OK и Отмена, т. к. MFC добавляет их в окно свойств автоматически. Также в него добавляется кнопка Применить (Apply) и, возможно, Помощь (Help). При выводе окна свойств на экран кнопка Применить сначала запрещена, а включается она после того, как какая-либо страница свойств вызовет функцию-член CPropertyPage::SetModified с параметром TRUE. SetModified надо вызывать при каждом изменении параметров страницы свойств – например, при изменении текста в строке ввода или при переключении кнопки с зависимой фиксацией. Для обработки нажатия кнопки Применить надо добавить в класс страницы свойств обработчик ON_BN_CLICKED для кнопки с идентификатором ID_APPLY_NOW. Этот обработчик должен вызвать UpdateData( TRUE ) для обновления значений переменных-членов страницы свойств и, возможно, передать эти значения окну-владельцу окна свойств. После этого, считая, что изменения учтены, надо запретить кнопку Применить вызовом SetModified( FALSE ) – по одному разу для каждой страницы свойств.

3. Стандартные диалоговые окна Windows

Ряд диалоговых окон, предназначенных для выполнения часто встречающихся в различных приложениях команд, был реализован как часть операционной системы. В MFC есть классы-оболочки для этих окон, они перечислены в табл. 8.2.

Таблица 8.2. Классы стандартных диалоговых окон

Имя класса

Представляемые диалоговые окна

CFileDialog

Открыть и Сохранить как

CPrintDialog

Печать

CPageSetupDialog

Макет страницы

CFindReplaceDialog

Поиск и Замена (текста)

CColorDialog

Выбор цвета

CFontDialog

Выбор шрифта

При программировании на уровне API для вызова стандартного окна требуется заполнить некоторую структуру и передать ее функции API, например, ::GetOpenFileName. После возврата из этой функции введенные пользователем параметры будут сохранены в передававшейся функции структуре. MFC упрощает интерфейс стандартных окон, заполняя большинство полей структуры "по умолчанию" и автоматически извлекая из нее данных после закрытия диалогового окна. Например, получить имя открываемого файла в MFC-приложении можно так:

TCHAR szFilters[] = "Текстовые файлы (*.txt)¦*.txt¦Все файлы (*.*)¦*.*¦¦";

CFileDialog dlg( TRUE, "txt", "*.txt",

OFN_FILEMUSTEXIST ¦ OFN_HIDEREADONLY, szFilters );

if ( dlg. DoModal() == IDOK )

{

filename = dlg. GetPathName();

// Открытие файла и чтение данных из него

...

}

У конструктора CFileDialog параметр TRUE обозначает, что надо выводить окно Открыть, а не Сохранить как. Параметры "txt" и "*.txt" задают расширение файла "по умолчанию" – то расширение, которое будет добавлено к имени файла, если пользователь не укажет его явно. Значения OFN_... – это битовые флаги, задающие свойства диалогового окна. OFN_FILEMUSTEXIST задает, что требуется проверять наличие файла с введенным пользователем именем и не принимать имена несуществующих файлов. OFN_HIDEREADONLY скрывает флажок Только чтение, который по умолчанию появляется в диалоговом окне. Строка szFilters задает типы файлов, которые может выбирать пользователь. После возврата из DoModal, полный путь к выбранному файлу можно получить функцией CFileDialog::GetPathName. Функция CFileDialog::GetFileName возвращает часть имени файла без пути, а GetFileTitle – часть имени файла без пути и без расширения.

Изменить поведение класса CFileDialog или других стандартных диалоговых классов можно несколькими способами. Во-первых, можно задать параметры окна в конструкторе класса (битовых флагов OFN_... больше 10-ти, все они влияют на внешний вид и поведение окна). Например, чтобы вызвать окно Открыть для получения имени только одного существующего файла, конструктор вызывается так:

CFileDialog dlg( TRUE, "txt", "*.txt",

OFN_FILEMUSTEXIST ¦ OFN_HIDEREADONLY, szFilters );

Чтобы пользователь мог выделить несколько файлов, добавляется всего один флаг:

CFileDialog dlg( TRUE, "txt", "*.txt",

OFN_FILEMUSTEXIST ¦ OFN_HIDEREADONLY ¦ OFN_ALLOWMULTISELECT,

szFilters );

После возврата из DoModal список имен выбранных файлов хранится в буфере, на который указывает поле структуры m_ofn. lpstrFile. Их можно перебрать с помощью функций CFileDialog::GetStartPosition и GetNextPathName.

В целом, классы MFC для стандартных диалоговых окон очень просты в использовании, особенно если пользоваться ими непосредственно и не создавать собственных подклассов.

Лекция 9. Архитектура однодокументных приложений документ/вид

В MFC версии 1.0 приложения содержали две обязательных компоненты: объект-приложение и объект-окно, представляющий главное окно приложения. Основной задачей объекта-приложения было создание объекта-окна, а этот объект выполнял обработку сообщений. MFC 1.0 фактически являлась библиотекой-оболочкой для Windows API, обеспечивающей объектно-ориентированный интерфейс для окон, диалоговых окон, контекстов устройств и других компонент, уже имеющихся в Windows, хотя и в иной форме.

В MFC 2.0 стиль разработки Windows-приложений был изменен – в качестве архитектуры приложения была предложена архитектура документ/вид (документ/представление). В приложении документ/вид (document/view application), данные приложения хранятся внутри объекта-документа (document object), а различные способы отображения этих данных реализуются объектами-видами (view objects).

Объекты-документы и объекты-виды совместно обеспечивают обработку команд пользователя и отображение данных приложения в различной форме. Базовым классом для объектов-документов в MFC является класс CDocument, а для объектов-видов – класс CView. Главным окном приложения остается окно подкласса CFrameWnd или CMDIFrameWnd, но оно в основном ответственно не за обработку сообщений, а служит контейнером для окна-вида, панелей инструментов, полос прокрутки и других компонент пользовательского интерфейса.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32