Стандартные диалоговые панели

Автор: manager Среда, Март 26th, 2008 Нет комментариев

Рубрика: Visual

1. Введение

В состав библиотеки MFC входит ряд классов, представляющих стандартные диалоговые панели. Эти классы позволяют легко реализовать такие часто используемые операции, как открытие и сохранение файла, выбор цвета, выбор шрифта и т.д. Все эти классы наследуются от CCommonDialog, который в свою очередь является производным по отношению к базовому классу CDialog.

Приведем классы стандартных диалоговых панелей и их назначение:

CColorDialog — Панель для выбора цвета
CFileDialog — Панель выбора файлов для открытия и сохранения на диске
CFindReplaceDialog — Панель для выполнения операции поиска и замены
CFontDialog — Панель для выбора шрифта
CPrintDialog — Панель для вывода документа на печать
CPageSetupDialog — Панель выбора формата документа
COleDialog — Панель для управления технологией OLE
Классы, управляющие стандартными диалоговыми панелями, определены в файле afxdlgs.h. Поэтому при использовании этих классов в приложении необходимо включить этот файл в исходный текст при помощи директивы #include.

2. Панель выбора цвета (класс CColorDialog)

Чтобы отобразить на экране стандартную диалоговую панель выбора цвета, надо создать объект классаCColorDialog, а затем вызвать методDoModal. При создании объекта классаСColorDialogиспользуется следующий конструктор:

CColorDialog(COLORREF clrInit=0,DWORD dwFlags=0,CWnd* pParentWnd=NULL);
Все параметры конструктора необязательны, однако в некоторых случаях использование этих параметров может помочь.

Первый параметр clrInit позволяет указать цвет, выбранный по умолчанию сразу после открытия диалоговой панели. Если параметр не будет указан, в качестве цвета, выбранного по умолчанию, будет использоваться черный цвет.

Параметр dwFlags содержит набор флагов, управляющих диалоговой панелью выбора цвета. При помощи него блокировать или разрешать работу некоторых элементов управления диалоговой панели выбора цвета. Если при создании объекта классаCColorDialogне указать параметр dwFlags, тем не менее можно выполнить настройку диалоговой панели, обратившись непосредственно к элементу m_cc данного класса. Параметр dwFlags, указанный в конструкторе, используется для инициализации m_cc. Изменения в элемент m_cc должны быть внесены до того, как панель будет отображаться на экране.

Последний параметр pParentWnd можно использовать, чтобы указать родительское окно диалоговой панели.

Методы класса CСolorDialog

Чтобы вывести диалоговую панель выбора цвета на экран, необходимо использовать методDoModal. После отображения панели на экране пользователь может выбрать из нее цвет и нажать кнопки OK или Cancel для подтверждения выбора цвета или отказа от него. Когда диалоговая панель закрывается, методDoModalвозвращается значения IDOK и IDCANCEL, в зависимости от того, какую кнопку нажал пользователь:

CColorDialog dlgColor;
int iResult=dlgColor.DoModal();
На экране появится стандартная диалоговая панель выбора цвета Color. В верхней половине диалоговой панели расположены 48 прямоугольников, имеющих различные цвета. Они представляют так называемые основные цвета (Basic colors). Можно выбрать один из этих цветов и нажать кнопку OK. После того, как диалоговая панель закрыта (методDoModalзавершил свою работу), можно воспользоваться методами классаCColorDialog, чтобы узнать цвета, выбранные пользователем.

Для определения цвета, выбранного пользователем, можно обратиться к методуGetColorклассаCColorDialog. Данный метод возвращает значение COLORREF, соответствующее выбранному цвету.

Если пользователю недостаточно основных цветов, представленных в диалоговой панели Color, он может выбрать до 16 дополнительных цветов. Для этого он должен нажать кнопку DefineCustom Colors. Диалоговая панель изменит свой внешний вид — появятся дополнительные органы управления, позволяющие выбрать любой из 16 777 216 цветов. Когда цвет выбран, нужно нажать кнопку Add Custom Colors. Выбранный цвет будет добавлен к дополнительным цветам (Custom colors) — один из свободных прямоугольников окрасится соответствующим цветом.

При помощи метода GetSavedCustomColors класса CColorDialog можно определить дополнительные цвета, выбранные пользователем в диалоговой панели Color. Этот метод возвращает указатель на массив из 16 элементов типа COLORREF. Каждый элемент массива описывает один дополнительный цвет.

Когда диалоговая панель Color отображается приложением первый раз, все прямоугольники, отображающие дополнительные цвета, имеют белый цвет. Дополнительные цвета, выбранные пользователем, сохраняются во время работы приложения. После перезапуска приложения дополнительные цвета сбрасываются.

3. Панель выбора файлов (класс CFileDialog)

Среди стандартных диалоговых панелей, для которых в библиотеке MFC создан специальный класс, есть панели для работы с файловой системой — Open и Save As. Диалоговая панель Open позволяет выбрать один или несколько файлов и открыть их для дальнейшего использования. Диалоговая панель Save As позволяет выбрать имя файла для записи в него документа.

Для управления диалоговыми панелями Open и Save As предназначен один классCFileDialog. Рассмотрим конструктор класса CFileDialog более подробно:

CFileDialog(BOOL bOpenFileDialog,
LPCTSTR lpszDefExt=NULL,LPCTSTR lpszFileName=NULL,
DWORD dwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter=NULL,CWnd* pParentWnd=NULL);
Объекты классаCFileDialogпредставляют диалоговые панели Open или Save As в зависимости от параметра bOpenFileDialog. Если параметр bOpenFileDialog содержит значение TRUE, то создается объект, управляющий диалоговой панелью Open, а если FALSE — диалоговой панелью Save As.

Параметр bOpenFileDialog является единственным обязательным параметром, который необходимо указать. Остальные параметры конструктора классаCFileDialogзадают различные режимы работы панели и могут не указываться.

Чтобы создать объект классаCFileDialog, представляющий диалоговую панель для открытия файлов (mFileOpen), и объект, представляющий диалоговую панель для сохранения файлов (mFileSaveAs), можно воспользоваться следующими вызовами конструктора класса:

CFileDialog mFileOpen(TRUE); // для панели открытия файлов
CFileDialog mFileSaveAs(FA LSE); // для панели сохранения файла
Во многих случаях имена файлов, которые нужно открыть или закрыть, имеют определенное расширение. Параметр lpszDefExt позволяет задать расширение файлов, используемое по умолчанию. То есть, если пользователь при определении имени файла не укажет расширение, имени файла автоматически присваивается расширение, принятое по умолчанию. Если при определении свойств диалоговой панели программист присвоит параметру lpszDefExt значение NULL, то расширение файлов должно задаваться пользователем явно.

В некоторых случаях требуется, чтобы диалоговые панели отображались с уже выбранным именем файла. Чтобы указать имя файла, используемое по умолчанию, применяется параметр lpszFileName. Если параметр lpszFileName имеет значение NULL, данная возможность не реализуется.

С помощью флага dwFlags можно изменить внешний вид и некоторые другие характеристики стандартных диалоговых панелей классаCFileDialog. В него можно записать комбинацию флагов, управляющих различными характеристиками этих панелей. Например, флаг OFN_HIDEREADONLY означает, что из диалоговой панели удаляется переключатель «Read Only», а флаг OFN_OVERWRITEPROMPT (используемый для панели Save As) — что необходимо выводить диалоговую панель с предупреждением, если пользователь выбирает для сохранения имя уже существующего файла.

Диалоговые панели выбора файлов обычно имеют список так называемых фильтров, включающих названия типов файлов и расширения имен файлов данного типа. Выбрав фильтр, пользователь указывает, что он желает работать только с файлами определенного типа, имеющими соответствующее расширение. Файлы с другими расширениями в диалоговых панелях не отображаются.

Список фильтров можно указать через параметр lpszFilter. Одновременно можно указать несколько фильтров. Каждый фильтр задается двумя строками — строкой, содержащей имя фильтра, и строкой, в которой перечислены соответствующие ему расширения имен файлов. Если одному типу соответствует несколько расширений, они разделяются символом ;. Строка, содержащая имя фильтра, отделяется от строки с расширениями файлов символом |. Если используется несколько фильтров, то они также отделяются друг от друга символом |. Например, в качестве строки, задающей фильтры, можно использовать строку вида:

char szFilters[] =
» Data (*.dat) |*.dat| Packed Data (*.pac;*.wav) | *.pac; *.wav| All Files (*.*)| *.* ||»;
Диалоговые панели, представленные объектами классаCFileDialog, могут иметь или не иметь родительского окна. Чтобы указать родительское окно, нужно передать конструктору CFileDialog указатель на него через параметр pParentWnd.

Методы класса CFileDialog

Создание объекта классаCFileDialogеще не вызывает отображения соответствующей диалоговой панели. Для этого необходимо воспользоваться методом DoModalкласса CFileDialog.При вызове методаDoModalдля ранее созданного объекта классаCFileDialogна экране открывается соответствующая диалоговая панель. После того, как пользователь завершает работу с диалоговой панелью, методDoModalвернет значение IDOK или IDCANCEL в случае успешного завершения и нуль — в случае возникновения ошибок:

CFileDialog dlgOpen(TRUE);
int iResult=dlgOpen.DoModal();
После того, как пользователь закроет диалоговую панель и методDoModalвернет управление, можно воспользоваться другими методами классаCFileDialog, чтобы определить имена выбранных файлов:

GetPathName — Определяет полный путь файла
GetFileName — Определяет имя выбранного файла
GetFileExt — Определяет расширение имени выбранного файла
GetFileTitle — Позволяет определить заголовок выбранного файла
GetNextPathName — Если диалоговая панель позволяет выбрать сразу несколько файлов, то этот метод можно использовать для определения полного пути следующего из выбранных файлов
GetReadOnlyPref — Позволяет узнать состояние атрибута «только для чтения» (read-only) выбранного файла
GetStartPosition — Возвращает положение первого элемента из списка имен файлов
Наиболее важный метод -GetPathName.Он получает полный путь файла, выбранного из диалоговых панелей Open или Save As. Если диалоговая панель позволяет выбрать сразу несколько файлов, тогда методGetPathNameвозвращает массив строк, состоящий из нескольких строк, заканчивающихся двоичным нулем. Первая из данных строк содержит путь к каталогу, в котором расположены выбранные файлы, остальные строки содержат имена выбранных файлов. Выделение строки, содержащей путь к каталогу, проблем не вызывает, а чтобы получить имена выбранных файлов, необходимо воспользоваться методамиGetStartPositionиGetNextPathName.

МетодGetStartPositionвозвращает значение типа POSITION. Оно предназначено для передачи методуGetNextPathNameи получения очередного имени выбранного файла. Если пользователь не выбрал ни одного файла, методGetStartPositionвозвращает значение NULL. Значение, полученное этим методом, следует записать во временную переменную типа POSITION и передать ссылку на нее методуGetNextPathName. МетодGetNextPathNameвернет полный путь первого из выбранных в диалоговой панели файлов и изменит значение переменной pos, переданной методу по ссылке. Новое значение pos можно использовать для последующих вызовов методаGetNextPathNameи получения путей всех остальных выбранных файлов. Когда методGetNextPathNameвернет имена всех выбранных файлов, в переменную pos записывается значение NULL.

В панелях Open и Save As имеется переключатель «ReadOnly». По умолчанию этот преключатель не отображается. Если есть необходимость воспользоваться этим переключателем, то нужно отказаться от использования флага OFN_HIDEREADONLY.

МетодGetReadOnlyPrefпозволяет определить положение переключателя «ReadOnly». Если переключатель включен, то методGetReadOnlyPrefвозвращает ненулевое значение. В противном случаеGetReadOnlyPrefвозвращает нуль.

4. Панель выбора шрифта (класс CFontDialog)

Стандартная диалоговая панель Font предназначена для выбора шрифта. Эта панель отображает список шрифтов, установленных в системе, и позволяет выбрать название шрифта, его начертание и другие параметры.

Для управления диалоговой панелью Font в библиотеку классов MFC включен классCFontDialog. Методы этого класса можно использовать для отображения панели Font и определения характеристик шрифта, выбранного пользователем. Конструктор класса CFontDialog:

CFontDialog(LPLOGFONT lplfInitial=NULL,
DWORD dwFlags=CF_EFFECTS | CF_SCREENFONTS,
CDC* pdcPrinter,CWnd* pParentWnd=NULL);
Все параметры конструктора являются необязательными. Настройка стандартной панели выбора шрифта, которая выполняется конструктором классаCFontDialogпо умолчанию, удовлетворяет большинству пользователей.

Параметр lplfInitial является указателем на структуру LOGFONT, описывающую логический шрифт. Если этот параметр используется, то в диалоговой панели по умолчанию будет выбран шрифт, наиболее соответствующий шрифту, описанному в структуре LOGFONT.

Параметр dwFlags задает набор флагов, управляющий различными режимами работы панели. Например, флаг CF_EFFECTS позволяет пользователю создавать подчеркнутые и перечеркнутые буквы, определять цвет букв, а флаг CF_SCREENFONTS — разрешает выбирать только экранные шрифты.

Через параметр pdcPrinter можно передать конструктору контекст отображения принтера, шрифты которого будут представлены в диалоговой панели Font. Данный параметр используется только в том случае, если в параметре dwFlags указаны флаги CF_PRINTERFONTS или CF_BOTH.

Через параметр pParentWnd можно указать родительское окно для диалоговой панели Font.

Методы класса CFontDialog

Для отображения диалоговой панели Font предназначен виртуальный методDoModal. Если пользователь выбрал шрифт и нажал кнопку OK, методDoModalвозвращает идентификатор IDOK, если пользователь отменил выбор шрифта, методDoModalвозвращает идентификатор IDCANCEL:

CFontDialog dlgFont;
int iResult=dlgFont.DoModal();
Остальные методы класса предназначены для определения характеристик выбранного пользователем шрифта.

МетодGetCurrentFontпозволяет сразу определить все характеристики выбранного шрифта, записав их в структуру LOGFONT.

Остальные методы класса позволяют определить только отдельные характеристики выбранного шрифта:

GetFaceName — Возвращает имя выбранного шрифта
GetStyleName — Возвращает имя стиля выбранного шрифта
GetSize — Возвращает размер выбранного шрифта
GetColor — Возвращает цвет выбранного шрифта
GetWeight — Возвращает плотность выбранного шрифта
IsStrikeOut — Определяет, является ли шрифт выделенным перечеркнутой линией
IsUnderline — Определяет, является ли шрифт выделенным подчеркиванием
IsBold — Определяет, является ли шрифт жирным
IsItalic — Определяет, является ли шрифт наклонным
5. Панель для вывода документов на печать (класс CPrintDialog)

КлассCPrintDialogможно использовать для создания двух видов диалоговых панелей, предназначенных для печати документов и выбора форматов документов. Кроме класса CPrintDialogможно также использовать класс CPageSetupDialog. Он позволяет создать диалоговую панель для выбора формата документа, имеющую несколько иной вид.

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

В меню File такого приложения находятся три строки (Print, Print Preview и Print Setup), которые управляют процессом печати документов, подготовленных в приложении. Чтобы распечатать документ, достаточно выбрать из меню File строку Print. На экране появится диалоговая панель Print. В ней можно выбрать печатающее устройство для печати документов (группа Name), указать, будет печататься весь документ либо его часть (группа Print range), а также сколько копий документа будет напечатано (группа Copies). Также можно настроить различные характеристики печатающего устройства, если нажать кнопку Properties в группе Printer.

Если требуется определить только печатающее устройство и формат документа, из меню File следует выбрать строку Printer Setup. В группе Printer можно указать печатающее устройство и настроить его соответствующим образом. Группа Paper задает формат бумаги и режим подачи бумаги в печатающее устройство. Группа Orientation включает только один переключатель, определяющий ориентацию бумаги. Он принимает положение Portrait для вертикальной ориентации изображения на бумаге (режим «портрет») или Landscape для горизонтальной ориентации изоборажения на бумаге (режим «ландшафт»).

Строка Print Preview меню File выбирается для предварительного просмотра документа перед печатью. При этом главное окно приложения изменит свой внешний вид и можно будет просмотреть, как будет выглядеть документ после печати.

Если не требуется выполнять специфическую обработку документа перед печатью, то вряд ли понадобится самостоятельное добавление программного кода, отвечающего за процесс печати. Просто следует отметить, что процедура создания панелей, связанных с печатью документа, практически ничем не отличается от создания выше описанных стандартных диалоговых панелей.

6. Панель для выполнения поиска и замены (класс CFindReplaceDialog)

Класс CFindReplaceDialogпредназначен для управления диалоговыми окнами Find и Replace. Диалоговая панель Find используется для поиска известных строк в документе приложения, а панель Replace позволяет замену одной строки на другую.

Важным отличием диалоговых панелей Find и Replace от других стандартных диалоговых панелей является то, что они представляют собой немодальныедиалоговые панели. Поэтому процесс создания этих панелей значительно отличается от процесса создания стандартных панелей для выбора цвета, шрифта и имен файла.

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты