Поделиться через


Настройка общих диалоговых окон

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

В этом разделе рассматриваются следующие методы настройки общего диалогового окна:

Пользовательские шаблоны

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

Для всех общих диалоговых окон, за исключением диалоговых окон "Открыть" и "Сохранить как" в стиле Обозреватель, необходимо изменить шаблон по умолчанию, чтобы создать настраиваемый шаблон, заменяющий шаблон по умолчанию. Настраиваемый шаблон определяет тип и положение стандартных элементов управления, а также любых дополнительных элементов управления.

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

Тип диалогового окна Файл шаблона Включить файл
Цвет Color.dlg ColorDlg.h
Поиск Findtext.dlg Dlgs.h
Шрифт Font.dlg Dlgs.h
Открыть (множественный выбор) Fileopen.dlg Dlgs.h
Open (single selection) Fileopen.dlg Dlgs.h
Настройка страницы Prnsetup.dlg Dlgs.h
Печать Prnsetup.dlg Dlgs.h
Настройка печати (устаревшая) Prnsetup.dlg Dlgs.h
Заменить Findtext.dlg Dlgs.h

Чтобы включить настраиваемый шаблон, необходимо установить флаг в элементе Flags соответствующей структуры диалогового окна. Если шаблон является ресурсом в приложении или библиотеке динамической компоновки, установите флаг ENABLETEMPLATE в элементе Flags и используйте элементы hInstance и lpTemplateName структуры для идентификации модуля и имени ресурса. Если шаблон уже находится в памяти, установите флаг ENABLETEMPLATEHANDLE в элементе Flags и используйте элемент hInstance для идентификации объекта памяти, содержащего шаблон.

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

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

Процедуры перехватчика для общих диалоговых окон

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

  • Стандартная процедура перехватчика, используемая с большинством распространенных диалоговых окон
  • Процедура перехватчика в стиле Обозреватель, поддерживаемая диалоговым окном "Открыть" и "Сохранить как"

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

Сообщение Обработка
WM_INITDIALOG Процедура диалогового окна по умолчанию обрабатывает сообщение перед его передачей в процедуру перехватчика. Параметр lParam сообщения является указателем на структуру инициализации, указанную при создании диалогового окна.
Все остальные сообщения Процедура перехватчика сначала получает сообщение. Затем возвращаемое значение процедуры перехватчика определяет, обрабатывает ли диалоговая процедура по умолчанию сообщение или игнорирует его.

Для диалоговых окон Открыть и Сохранить как в стиле Обозреватель процедура перехватчика не получает сообщения, предназначенные для стандартных элементов управления в диалоговом окне. Вместо этого он получает уведомления из диалогового окна и сообщения для всех дополнительных элементов управления, определенных в пользовательском шаблоне. Дополнительные сведения см. в статье Процедуры перехватчика в стиле Обозреватель.

Чтобы включить процедуру перехватчика, задайте значение ENABLEHOOK в элементе Flags соответствующей структуры диалогового окна. Если установлен флаг ENABLEHOOK , член lpfnHook структуры должен указать адрес процедуры перехватчика.

В следующей таблице показан тип процедуры перехватчика для каждого из общих диалоговых окон.

Тип диалогового окна Процедура перехватчика
Цвет CCHookProc
Поиск или замена FRHookProc
Шрифт CFHookProc
Открыть или сохранить как (Обозреватель стиле) OFNHookProc
Открыть или сохранить как (старый стиль) OFNHookProcOldStyle
Печать PrintHookProc
Настройка страницы PageSetupHook

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

Примечание

Диалоговое окно Параметры печати заменено диалоговым окном Параметры страницы . Приложения должны использовать диалоговое окно Параметры страницы . Однако для обеспечения совместимости функция PrintDlg по-прежнему поддерживает отображение диалогового окна Настройка печати . Вы можете указать процедуру перехватчика SetupHookProc для диалогового окна Настройка печати .

Распространенные диалоговые сообщения

Распространенные диалоговые окна используют сообщения для уведомления процедуры окна или процедуры перехвата при возникновении определенных событий. Кроме того, существуют сообщения, которые можно отправлять в общее диалоговое окно для получения сведений или управления поведением или внешним видом диалогового окна. В этом разделе описываются распространенные диалоговые сообщения, зарегистрированные функцией RegisterWindowMessage, сообщения, используемые диалоговым окном "Шрифт" и "Параметры страницы", а также сообщения, используемые в Обозреватель диалоговых окнах "Открыть" и "Сохранить как".

Общая библиотека диалоговых окон определяет набор строк сообщений. Вы можете передать константу, связанную с одной из этих строк сообщения , в RegisterWindowMessage , чтобы получить идентификатор сообщения. Затем идентификатор можно использовать для обнаружения и обработки сообщений, отправленных из общего диалогового окна, или для отправки сообщений в общее диалоговое окно. В следующей таблице показаны константы сообщений и описано их использование.

Contants Использование
COLOROKSTRING Диалоговое окно Цвет отправляет это сообщение в процедуру перехватчика, когда пользователь выбирает цвет и нажимает кнопку ОК . Процедура перехватчика может принять цвет или отклонить его и принудительно открыть диалоговое окно.
FILEOKSTRING Диалоговое окно Открыть или Сохранить как отправляет это сообщение в процедуру перехватчика, когда пользователь выбирает имя файла и нажимает кнопку ОК . Процедура перехватчика может принять имя файла или отклонить его и принудительно открыть диалоговое окно. Для диалоговых окон "Открыть" и "Сохранить как" в стиле Обозреватель это сообщение заменено сообщением уведомления CDN_FILEOK.
FINDMSGSTRING Диалоговое окно "Найти или заменить " отправляет это сообщение в процедуру окна родительского окна, когда пользователь нажимает кнопку "Найти далее", "Заменить" или "Заменить все" или закрывает диалоговое окно. Параметр lParam сообщения является указателем на структуру FINDREPLACE, содержащую входные данные пользователя.
HELPMSGSTRING Все распространенные диалоговые окна отправляют это сообщение в процедуру окна родительского окна, когда пользователь нажимает кнопку Справка . Для диалоговых окон "Открыть" и "Сохранить как" в стиле Обозреватель это сообщение заменено сообщением уведомления CDN_HELP.
LBSELCHSTRING Диалоговое окно Открыть или Сохранить как отправляет это сообщение в процедуру перехватчика, когда пользователь изменяет выбор в списке Имя файла . Для диалоговых окон "Открыть" и "Сохранить как" в стиле Обозреватель это сообщение заменено сообщением уведомления CDN_SELCHANGE.
SETRGBSTRING Процедура перехватчика может отправить это сообщение в диалоговое окно Цвет , чтобы задать текущий цвет.
SHAREVISTRING Диалоговое окно Открыть или Сохранить как отправляет это сообщение в процедуру перехватчика, если для выбранного файла происходит нарушение общего доступа, когда пользователь нажимает кнопку ОК . Для диалоговых окон "Открыть" и "Сохранить как" в стиле Обозреватель это сообщение заменено CDN_SHAREVIOLATION уведомлением.

Некоторые распространенные диалоговые окна отправляют и получают другие сообщения окон. Процедура перехватчика для диалогового окна Шрифт может отправлять любые сообщения WM_CHOOSEFONT_* в диалоговое окно Шрифт . Дополнительные сведения см. в разделе Диалоговое окно шрифта. Диалоговое окно Параметры страницы отправляет сообщения WM_PSD_*, если вы включили процедуру перехватчика PagePaintHook . Дополнительные сведения см. в разделе Диалоговое окно "Настройка страницы".

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

Поддержка справки

Общие диалоговые окна предоставляют контекстно-зависимые справки для стандартных элементов управления диалогового окна. Чтобы предоставить дополнительную справку для общего диалогового окна, можно отобразить кнопку Справка и обработать сообщения, созданные при нажатии кнопки пользователем. Кнопка "Справка " является дополнением к контекстной справке по умолчанию. Кнопка Справка полезна для описания общего назначения диалогового окна, которое применяется к приложению.

Справка Context-Sensitive

Все распространенные диалоговые окна предоставляют контекстно-зависимые справки для стандартных элементов управления диалогового окна. Пользователь может отображать справку для отдельных элементов управления любым из следующих методов:

  • Выберите элемент управления и нажмите клавишу F1.
  • Нажатие кнопки ? в строке заголовка и последующее нажатие элемента управления.
  • Нажатие правой кнопки мыши над элементом управления.

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

Рекомендуемые действия Сообщение
Щелкните правую кнопку мыши над элементом управления. WM_CONTEXTMENU
Нажмите клавишу F1. WM_HELP
Нажмите кнопку ? в строке заголовка, а затем щелкните элемент управления . WM_HELP

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

Кнопка "Справка"

Вы можете отобразить кнопку Справка в любом из распространенных диалоговых окон, задав значение SHOWHELP в элементе Flags структуры инициализации диалогового окна. При отображении кнопки Справка необходимо обработать запрос пользователя на помощь. Обработку можно выполнить либо в одной из оконных процедур приложения, либо в процедуре перехватчика для диалогового окна. Как правило, запрос на помощь обрабатывается путем вызова функции WinHelp .

Для обработки сообщений справки в одной из процедур окна необходимо получить идентификатор сообщения для строки, определенной значением HELPMSGSTRING , и определить окно для получения сообщений. Чтобы получить идентификатор сообщения, укажите HELPMSGSTRING в качестве параметра в вызове функции RegisterWindowMessage . При создании диалогового окна используйте элемент hwndOwner структуры инициализации диалогового окна, чтобы определить окно, которое будет получать сообщения. Процедура диалогового окна отправляет сообщение в процедуру окна всякий раз, когда пользователь нажимает кнопку Справка .

Для обработки сообщений справки в процедуре перехватчика необходимо обработать сообщение WM_COMMAND . Процедура перехватчика предоставляет справку, если параметр wParam этого сообщения указывает, что пользователь нажал кнопку Справка . Идентификатором кнопки "Справка " является константой pshHelp, определенной в файле Dlgs.h.

Процедуры перехвата для диалоговых окон "Открыть" и "Сохранить как" в стиле Обозреватель не получают WM_COMMAND сообщений для кнопки "Справка". Вместо этого диалоговое окно отправляет CDN_HELP уведомление процедуре перехватчика при нажатии кнопки Справка .