Чем отличаются диалоговые окна от окон приложений
Окно приложения и окно документа
⇐ ПредыдущаяСтр 2 из 4Следующая ⇒
Операционная система Windows работает с двумя основными типами файлов: с файлами приложений (или прикладных программ) и с файлами документов. Запуск приложения всегда сопровождается открытием окна. Внутри окна приложения может находиться окно документа. Документ может содержать текстовую, графическую, звуковую или видео информацию. При открытии документа автоматически запускается приложение, работающее с этим файлом.
В верхней части окна документа, так же как и в окне приложения, расположена строка заголовка, в котором указывается имя документа.
Так как окно документа всегда находится внутри окна приложения, его называют подчинённым. Подчинённое окно отличается тем, что не имеет строки меню, и его размеры ограничены размерами окна приложения.
Чтобы максимально использовать рабочую область окна приложения, окно документа можно развернуть (при помощи кнопки Развернутьили двойного щелчка мыши на его строке заголовке). В этом случае строки заголовка обоих окон объединяются в одну, и имя документа будет указано в этой строке после названия приложения.
Переключение между окнами
При одновременной работе с несколькими программами возникает необходимость переключаться между ними. Если все окна не видны на экране, переход к одной из запущенных программ можно осуществить несколькими способами:
· Щелкнуть мышью по кнопке программы на панели задач;
· Одновременно нажать клавиши Alt-Tab – в середине экрана при этом высвечивается окно с пиктограммами запущенных программ, открытых папок и документов. Одна из пиктограмм будет обведена рамкой – это активное приложение или папка. Если, не отпуская клавишу {Alt}, нажать клавишу {Tab}, рамка перемещается между значками. Дойдя до нужного окна, следует отпустить клавиши { Alt-Tab };
· Нажать комбинацию клавиш {Alt - Esc}. На экране появится другое открытое окно. Однако, при использовании этой комбинации клавиш, если окно программы свернуто, оно не будет открыто.
При работе с несколькими окнами их расположение на экране можно упорядочить с помощью контекстного меню , которое вызывается щелчком правой кнопки мыши в свободной области панели задач.
Это меню содержит следующие команды:
· Каскадом– располагает открытые окна каскадом одно над другим с перекрытием. При таком расположении видны заголовки и отдельные участки большого количества окон. Для перемещения окна на передний план следует щелкнуть мышью в любой видимой части этого окна;
· Сверху вниз– располагает открытые окна подряд, без перекрытия в один или несколько рядов;
· Слева направо– располагает окна в один горизонтальный ряд без промежутка или перекрытия;
· Свернуть все окна– сворачивает все открытые окна. Работающие приложения будут представлены в виде кнопок на Панели задач.
Следует учитывать, что командами меню можно упорядочить только открытые окна. Со свёрнутыми окнами эти команды не работают.
Окно, с которым работает пользователь в данный момент, называется активным. Такое окно располагается на переднем плане поверх остальных окон и работает в приоритетном режиме. Чтобы сделать окно активным, достаточно щелчка мыши в любом месте в пределах окна.
Служебные окна
Кроме остальных окон приложений и документов при работе часто встречаются служебные окна – диалоговые и информационные.
После активизации некоторых команд на экране появляется окно диалога, содержащее параметры, которые следует задать, или выбрать среди них альтернативный вариант для выполнения команды. Примеры диалоговых окон приведены на рисунке 7.
Рис. 7. Примеры диалоговых окон.
Информационное окно сообщает пользователю определённые сведения и имеет одну или несколько командных кнопок. В таком окне может быть нарисована большая буква I – информационное окно, крест, сообщение о невозможности выполнения операции, восклицательный или вопросительный знаки и т.д.
1.5. Справочная система Windows
Windows имеет хорошо оформленную многоуровневую справочную систему, позволяющую получить полезную информацию по интересующему пользователя приложению, команде или по системе в целом. Основное назначение справки – оказать помощь в изучении различных разделов операционной системы.
Для вызова на экран справочной системы нужно выбрать в главном меню пункт Справка.
Окно справки содержит три вкладки – Содержание, Указатель и Поиск. Основную часть окна занимает перечень разделов, упорядоченных тематически, по которым можно получить справку. Слева от названия каждого раздела изображена книга. Щелчоккнопки Показать вызывает на экран окно с требуемой информацией.
Получить справку можно и из окна приложения, нажав клавишу {F1} или выбрав пункт меню с изображением знака вопроса.
Вкладка Указательсодержит список ключевых слов, упорядоченных по алфавиту. Список можно просмотреть с помощью линейки прокрутки или ввести название темы в поле 1 - «Введите ключевое слово для поиска”. После ввода первых букв названия темы во втором поле списка появятся заголовки разделов, первые буквы которых совпадают с напечатанными символами.
Вкладка Поискпозволяет найти справочную информациюпо определённым словам или сочетанием символов.
Работа с файлами и папками
Файлы и папки
Информация, записанная на диске персонального компьютера: документы, программы, - хранится в файлах. Файл – это основная структурная единица, имеющая конкретное имя с которой работает операционная система. Группу файлов на одном магнитном носителе объединяют по какому–либо критерию, который может задать сам пользователь в папки. Папка, в отличие от файла, содержит не документ или программу, а список, входящих в неё папок и файлов. Она хранит информацию о размере файла, дате его последнего изменения, атрибуты файла и прочее.
Количество файлов и подчинённых папок, входящих в папку более высокого уровня , не ограничивается. Папки и файлы обычно группируют по тематике. Так создаётся иерархическая упорядоченная древовидная структура файловой системы. В новой операционной системе они изображаются как папки. Папка может содержать различные объекты: принтер, диск, модем. Некоторые папки, например, Панель управления, содержат набор программ для управления операционной системой. Папка, с которой могут работать другие пользователи в сети, называются общей (совместной или разделяемой).
Диалоговые окна
(диалоговые окна) - приложения Win32
- 6 минут на чтение
В этой статье
Диалоговое окно - это временное окно, которое приложение создает для получения пользовательского ввода. Приложение обычно использует диалоговые окна, чтобы запросить у пользователя дополнительную информацию для пунктов меню.Диалоговое окно обычно содержит один или несколько элементов управления (дочерние окна), с помощью которых пользователь вводит текст, выбирает параметры или направляет действие.
Windows также предоставляет предопределенные диалоговые окна, которые поддерживают общие пункты меню, такие как Открыть и Печать . Приложения, которые используют эти элементы меню, должны использовать общие диалоговые окна для запроса этого пользовательского ввода, независимо от типа приложения.
В этом разделе
Функции диалогового окна
Имя | Описание |
---|---|
CreateDialog | Создает немодальное диалоговое окно из ресурса шаблона диалогового окна. |
CreateDialogIndirect | Создает немодальное диалоговое окно из шаблона диалогового окна в памяти. |
CreateDialogIndirectParam | Создает немодальное диалоговое окно из шаблона диалогового окна в памяти. Перед отображением диалогового окна функция передает определенное приложением значение в процедуру диалогового окна как параметр lParam сообщения WM_INITDIALOG .Приложение может использовать это значение для инициализации элементов управления диалогового окна. |
CreateDialogParam | Создает немодальное диалоговое окно из ресурса шаблона диалогового окна. Перед отображением диалогового окна функция передает определенное приложением значение в процедуру диалогового окна как параметр lParam сообщения WM_INITDIALOG . Приложение может использовать это значение для инициализации элементов управления диалогового окна. |
DefDlgProc | Вызывает процедуру окна диалогового окна по умолчанию, чтобы обеспечить обработку по умолчанию для любых оконных сообщений, которые диалоговое окно с частным классом окна не обрабатывает. |
DialogBox | Создает модальное диалоговое окно из ресурса шаблона диалогового окна. DialogBox не возвращает управление, пока указанная функция обратного вызова не завершит модальное диалоговое окно, вызвав функцию EndDialog . |
DialogBoxIndirect | Создает модальное диалоговое окно из шаблона диалогового окна в памяти. DialogBoxIndirect не возвращает управление до тех пор, пока указанная функция обратного вызова не завершит модальное диалоговое окно, вызвав функцию EndDialog . |
DialogBoxIndirectParam | Создает модальное диалоговое окно из шаблона диалогового окна в памяти. Перед отображением диалогового окна функция передает определенное приложением значение в процедуру диалогового окна как параметр lParam сообщения WM_INITDIALOG . Приложение может использовать это значение для инициализации элементов управления диалогового окна. |
DialogBoxParam | Создает модальное диалоговое окно из ресурса шаблона диалогового окна.Перед отображением диалогового окна функция передает определенное приложением значение в процедуру диалогового окна как параметр lParam сообщения WM_INITDIALOG . Приложение может использовать это значение для инициализации элементов управления диалогового окна. |
DialogProc | Определяемая приложением функция обратного вызова, используемая с семействами функций CreateDialog и DialogBox . Он обрабатывает сообщения, отправленные в модальное или немодальное диалоговое окно.Тип DLGPROC определяет указатель на эту функцию обратного вызова. DialogProc - это имя-заполнитель для имени функции, определяемой приложением. |
EndDialog | Уничтожает модальное диалоговое окно, заставляя систему завершить любую обработку диалогового окна. |
GetDialogBaseUnits | Извлекает базовые единицы системного диалогового окна, которые представляют собой среднюю ширину и высоту символов в системном шрифте.Для диалоговых окон, которые используют системный шрифт, вы можете использовать эти значения для преобразования между единицами шаблона диалогового окна, как указано в шаблонах диалоговых окон, и пикселями. Для диалоговых окон, в которых не используется системный шрифт, преобразование единиц шаблона диалогового окна в пиксели зависит от шрифта, используемого диалоговым окном. |
GetDlgCtrlID | Извлекает идентификатор указанного элемента управления. |
GetDlgItem | Извлекает дескриптор элемента управления в указанном диалоговом окне. |
GetDlgItemInt | Преобразует текст указанного элемента управления в диалоговом окне в целочисленное значение. |
GetDlgItemText | Извлекает заголовок или текст, связанный с элементом управления в диалоговом окне. |
GetNextDlgGroupItem | Извлекает дескриптор первого элемента управления в группе элементов управления, который предшествует (или следует) за указанным элементом управления в диалоговом окне. |
GetNextDlgTabItem | Извлекает дескриптор первого элемента управления со стилем WS_TABSTOP , который предшествует (или следует) указанному элементу управления. |
IsDialogMessage | Определяет, предназначено ли сообщение для указанного диалогового окна, и, если да, обрабатывает сообщение. |
MapDialogRect | Преобразует указанные единицы диалогового окна в единицы экрана (пиксели).Функция заменяет координаты в указанной структуре RECT преобразованными координатами, что позволяет использовать структуру для создания диалогового окна или размещения элемента управления в диалоговом окне. |
MessageBox | Отображает модальное диалоговое окно, содержащее значок системы, набор кнопок и краткое сообщение о приложении, например информацию о состоянии или ошибке. Окно сообщения возвращает целочисленное значение, которое указывает, какую кнопку нажал пользователь. |
MessageBoxEx | Создает, отображает и управляет окном сообщения. Окно сообщения содержит определяемые приложением сообщение и заголовок, а также любую комбинацию предопределенных значков и кнопок. Кнопки на языке пользовательского интерфейса системы. |
MessageBoxIndirect | Создает, отображает и управляет окном сообщения. Окно сообщения содержит определяемые приложением текст сообщения и заголовок, любой значок и любую комбинацию предварительно определенных кнопок. |
SendDlgItemMessage | Отправляет сообщение указанному элементу управления в диалоговом окне. |
SetDlgItemInt | Устанавливает текст элемента управления в диалоговом окне в строковое представление указанного целочисленного значения. |
SetDlgItemText | Задает заголовок или текст элемента управления в диалоговом окне. |
Сообщения диалогового окна
Имя | Описание |
---|---|
DM_GETDEFID | Извлекает идентификатор элемента управления "кнопка" по умолчанию для диалогового окна. |
DM_REPOSITION | Перемещает диалоговое окно верхнего уровня так, чтобы оно умещалось в области рабочего стола. Приложение может отправить это сообщение в диалоговое окно после изменения его размера, чтобы убедиться, что все диалоговое окно остается видимым. |
DM_SETDEFID | Изменяет идентификатор кнопки по умолчанию для диалогового окна. |
Уведомления диалогового окна
Имя | Описание |
---|---|
WM_CTLCOLORDLG | Отправляется в диалоговое окно перед тем, как система рисует диалоговое окно.Отвечая на это сообщение, диалоговое окно может установить цвет текста и фона с помощью указанного дескриптора контекста устройства отображения. |
WM_ENTERIDLE | Отправляется в окно владельца модального диалогового окна или меню, которое переходит в состояние ожидания. Модальное диалоговое окно или меню переходит в состояние ожидания, когда в его очереди нет ожидающих сообщений после обработки одного или нескольких предыдущих сообщений. |
WM_GETDLGCODE | Отправлено оконной процедуре, связанной с элементом управления.По умолчанию система обрабатывает весь ввод с клавиатуры для элемента управления; система интерпретирует определенные типы ввода с клавиатуры как клавиши навигации диалогового окна. Чтобы переопределить это поведение по умолчанию, элемент управления может ответить на сообщение WM_GETDLGCODE , чтобы указать типы ввода, которые он хочет обработать сам. |
WM_INITDIALOG | Отправляется в процедуру диалогового окна непосредственно перед отображением диалогового окна. Процедуры диалогового окна обычно используют это сообщение для инициализации элементов управления и выполнения любых других задач инициализации, которые влияют на внешний вид диалогового окна. |
WM_NEXTDLGCTL | Отправляется в диалоговое окно, процедура установки фокуса клавиатуры на другой элемент управления в диалоговом окне. |
Структуры диалоговых окон
Имя | Описание |
---|---|
ШАБЛОН DLGITEMPLATE | Определяет размеры и стиль элемента управления в диалоговом окне. Одна или несколько из этих структур объединяются со структурой DLGTEMPLATE , чтобы сформировать стандартный шаблон для диалогового окна. |
DLGITEMTEMPLATEEX | Описывает расширенное диалоговое окно. Описание формата расширенного шаблона диалогового окна см. В DLGTEMPLATEEX . |
ШАБЛОН DLG | Определяет размеры и стиль диалогового окна. Эта структура, всегда первая в стандартном шаблоне для диалогового окна, также определяет количество элементов управления в диалоговом окне и, следовательно, определяет количество последующих структур DLGITEMTEMPLATE в шаблоне. |
DLGTEMPLATEEX | Расширенный шаблон диалогового окна начинается с заголовка DLGTEMPLATEEX , который описывает диалоговое окно и указывает количество элементов управления в диалоговом окне. Для каждого элемента управления в диалоговом окне шаблон расширенного диалогового окна имеет блок данных, который использует формат DLGITEMTEMPLATEEX для описания элемента управления. |
MSGBOXPARAMS | Содержит информацию, используемую для отображения окна сообщения.Функция MessageBoxIndirect использует эту структуру. |
О диалоговых окнах - приложения Win32
- 25 минут на чтение
В этой статье
Существует множество функций, сообщений и предопределенных элементов управления, которые помогают создавать диалоговые окна и управлять ими, что упрощает разработку пользовательского интерфейса для приложения. В этом обзоре описываются функции и сообщения диалогового окна, а также объясняется, как их использовать для создания и использования диалоговых окон.
Этот обзор включает в себя следующие темы:
Для получения дополнительной информации об общих диалоговых окнах см. Библиотеку общих диалоговых окон.
Когда использовать диалоговое окно
Большинство приложений используют диалоговые окна для запроса дополнительной информации для пунктов меню, требующих ввода данных пользователем. Использование диалогового окна - единственный рекомендуемый способ для приложения получить ввод. Например, для обычного пункта меню Открыть требуется имя файла, который нужно открыть, поэтому приложение должно использовать диалоговое окно, чтобы запрашивать имя у пользователя.В таких случаях приложение создает диалоговое окно, когда пользователь щелкает элемент меню, и уничтожает диалоговое окно сразу после того, как пользователь предоставит информацию.
Многие приложения также используют диалоговые окна для отображения информации или параметров, пока пользователь работает в другом окне. Например, текстовые редакторы часто используют диалоговое окно с возможностью текстового поиска. Пока приложение ищет текст, диалоговое окно остается на экране. Затем пользователь может вернуться в диалоговое окно и снова найти то же слово; или пользователь может изменить запись в диалоговом окне и найти новое слово.Приложения, использующие диалоговые окна таким образом, обычно создают их, когда пользователь щелкает элемент меню, и продолжают отображать его, пока выполняется приложение или пока пользователь явно не закроет диалоговое окно.
Для поддержки различных способов использования диалоговых окон приложениями существует два типа диалоговых окон: модальные и немодальные. Модальное диалоговое окно требует, чтобы пользователь предоставил информацию или отменил диалоговое окно, прежде чем разрешить приложению продолжить работу. Приложения используют модальные диалоговые окна вместе с пунктами меню, которые требуют дополнительной информации, прежде чем они смогут продолжить.Немодальное диалоговое окно позволяет пользователю предоставить информацию и вернуться к предыдущей задаче, не закрывая диалоговое окно. Модальными диалоговыми окнами легче управлять, чем немодальными диалоговыми окнами, поскольку они создаются, выполняют свою задачу и уничтожаются путем вызова одной функции.
Чтобы создать модальное или немодальное диалоговое окно, приложение должно предоставить шаблон диалогового окна для описания стиля и содержимого диалогового окна; приложение также должно предоставлять процедуру диалогового окна для выполнения задач.Шаблон диалогового окна представляет собой двоичное описание диалогового окна и содержащихся в нем элементов управления. Разработчик может создать этот шаблон как ресурс, который будет загружен из исполняемого файла приложения или создан в памяти во время работы приложения. Процедура диалогового окна - это определяемая приложением функция обратного вызова, которую система вызывает, когда она получает ввод для диалогового окна или задачи, которые диалоговое окно должно выполнить. Хотя процедура диалогового окна похожа на оконную процедуру, она не несет таких же обязанностей.
Приложение обычно создает диалоговое окно с помощью функции DialogBox или CreateDialog . DialogBox создает модальное диалоговое окно; CreateDialog создает немодальное диалоговое окно. Эти две функции загружают шаблон диалогового окна из исполняемого файла приложения и создают всплывающее окно, соответствующее спецификациям шаблона. Существуют и другие функции, которые создают диалоговое окно с помощью шаблонов в памяти; они передают дополнительную информацию в процедуру диалогового окна по мере создания диалогового окна.
Диалоговые окна обычно относятся к предопределенному исключительному классу окон. Система использует этот класс окна и соответствующую ему оконную процедуру как для модальных, так и для немодальных диалоговых окон. Когда функция вызывается, она создает окно для диалогового окна, а также окна для элементов управления в диалоговом окне, а затем отправляет выбранные сообщения в процедуру диалогового окна. Пока диалоговое окно является видимым, предопределенная оконная процедура управляет всеми сообщениями, обрабатывая некоторые сообщения и передавая другие в процедуру диалогового окна, чтобы процедура могла выполнять задачи.Приложения не имеют прямого доступа к предопределенному классу окна или оконной процедуре, но они могут использовать шаблон диалогового окна и процедуру диалогового окна для изменения стиля и поведения диалогового окна.
Окно владельца диалогового окна
У большинства диалоговых окон есть окно владельца (или, проще говоря, владельца). При создании диалогового окна приложение устанавливает владельца, указывая дескриптор окна владельца. Система использует владельца для определения положения диалогового окна в Z-порядке, чтобы диалоговое окно всегда располагалось над своим владельцем.Также система может отправлять сообщения оконной процедуре владельца, уведомляя ее о событиях в диалоговом окне.
Система автоматически скрывает или уничтожает диалоговое окно всякий раз, когда его владелец скрывается или уничтожается. Это означает, что процедура диалогового окна не требует специальной обработки для обнаружения изменений состояния окна-владельца.
Поскольку типичное диалоговое окно используется вместе с пунктом меню, окно-владелец обычно является окном, содержащим меню. Хотя можно создать диалоговое окно без владельца, это не рекомендуется.Например, когда модальное диалоговое окно не имеет владельца, система не отключает ни одно из других окон приложения и позволяет пользователю продолжать выполнять работу в других окнах, нарушая цель модального диалогового окна.
Когда у немодального диалогового окна нет владельца, система не скрывает и не уничтожает диалоговое окно, когда другие окна в приложении скрыты или уничтожены. Хотя это не отменяет цели немодального диалогового окна, это требует, чтобы приложение выполнило специальную обработку, чтобы диалоговое окно было скрыто и уничтожено в соответствующее время.
Окна сообщений
Окно сообщения - это специальное диалоговое окно, которое приложение может использовать для отображения сообщений и подсказок для простого ввода. Окно сообщения обычно содержит текстовое сообщение и одну или несколько кнопок. Приложение создает окно сообщения с помощью функции MessageBox или MessageBoxEx , задавая текст, а также количество и типы кнопок для отображения. Обратите внимание, что в настоящее время нет никакой разницы между работой MessageBox и MessageBoxEx .
Хотя окно сообщения является диалоговым окном, система берет на себя полный контроль над созданием окна сообщения и управлением им. Это означает, что приложение не предоставляет шаблон диалогового окна и процедуру диалогового окна. Система создает свой собственный шаблон на основе текста и кнопок, указанных для окна сообщения, и предоставляет собственную процедуру диалогового окна.
Окно сообщения - это модальное диалоговое окно, и система создает его, используя те же внутренние функции, что и DialogBox .Если приложение указывает окно владельца при вызове MessageBox или MessageBoxEx , система отключает владельца. Приложение также может указать системе отключить все окна верхнего уровня, принадлежащие текущему потоку, указав значение MB_TASKMODAL при создании диалогового окна.
Система может отправлять сообщения владельцу, например WM_CANCELMODE и WM_ENABLE , точно так же, как при создании модального диалогового окна.Окно владельца должно выполнять любые действия, запрошенные этими сообщениями.
Модальные диалоговые окна
Модальное диалоговое окно должно быть всплывающим окном, имеющим меню окна, строку заголовка и толстую рамку; то есть шаблон диалогового окна должен определять стили WS_POPUP , WS_SYSMENU , WS_CAPTION и DS_MODALFRAME . Хотя приложение может назначить стиль WS_VISIBLE , система всегда отображает модальное диалоговое окно независимо от того, задает ли шаблон диалогового окна стиль WS_VISIBLE .Приложение не должно создавать модальное диалоговое окно со стилем WS_CHILD . Модальное диалоговое окно с этим стилем отключается, предотвращая попадание любого последующего ввода в приложение.
Приложение создает модальное диалоговое окно с помощью функции DialogBox или DialogBoxIndirect . DialogBox требует имя или идентификатор ресурса, содержащего шаблон диалогового окна; DialogBoxIndirect требуется дескриптор объекта памяти, содержащего шаблон диалогового окна.Функции DialogBoxParam и DialogBoxIndirectParam также создают модальные диалоговые окна; они идентичны ранее упомянутым функциям, но передают указанный параметр в процедуру диалогового окна при создании диалогового окна.
При создании модального диалогового окна система делает его активным окном. Диалоговое окно остается активным, пока процедура диалогового окна не вызовет функцию EndDialog или система не активирует окно в другом приложении.Ни пользователь, ни приложение не могут сделать окно владельца активным, пока модальное диалоговое окно не будет уничтожено.
Если окно-владелец еще не отключено, система автоматически отключает окно и все дочерние окна, принадлежащие ему, при создании модального диалогового окна. Окно владельца остается отключенным, пока диалоговое окно не будет уничтожено. Хотя процедура диалогового окна потенциально может включить окно владельца в любое время, включение владельца противоречит цели модального диалогового окна и не рекомендуется.Когда процедура диалогового окна уничтожена, система снова включает окно владельца, но только если модальное диалоговое окно вызывало отключение владельца.
По мере того, как система создает модальное диалоговое окно, она отправляет сообщение WM_CANCELMODE в окно (если есть), в настоящее время захватывающее ввод от мыши. Приложение, получившее это сообщение, должно освободить захват мыши, чтобы пользователь мог перемещать мышь в модальном диалоговом окне. Поскольку система отключает окно владельца, все данные, вводимые мышью, теряются, если владелец не отпускает мышь после получения этого сообщения.
Чтобы обрабатывать сообщения для модального диалогового окна, система запускает собственный цикл сообщений, принимая временный контроль над очередью сообщений для всего приложения. Когда система извлекает сообщение, которое не предназначено явно для диалогового окна, она отправляет сообщение в соответствующее окно. Если он извлекает сообщение WM_QUIT , он отправляет сообщение обратно в очередь сообщений приложения, чтобы основной цикл сообщений приложения мог в конечном итоге получить сообщение.
Система отправляет сообщение WM_ENTERIDLE окну владельца всякий раз, когда очередь сообщений приложения пуста.Приложение может использовать это сообщение для выполнения фоновой задачи, пока диалоговое окно остается на экране. Когда приложение использует сообщение таким образом, приложение должно часто передавать управление (например, с помощью функции PeekMessage ), чтобы модальное диалоговое окно могло получать любой ввод пользователя. Чтобы предотвратить отправку модальным диалоговым окном сообщений WM_ENTERIDLE , приложение может указать стиль DS_NOIDLEMSG при создании диалогового окна.
Приложение уничтожает модальное диалоговое окно с помощью функции EndDialog .В большинстве случаев процедура диалогового окна вызывает EndDialog , когда пользователь нажимает Close в меню окна диалогового окна или нажимает кнопку OK или Cancel в диалоговом окне. Диалоговое окно может возвращать значение через функцию DialogBox (или другие функции создания), указав значение при вызове функции EndDialog . Система возвращает это значение после разрушения диалогового окна. Большинство приложений используют это возвращаемое значение, чтобы определить, успешно ли диалоговое окно выполнило свою задачу или было отменено пользователем.Система не возвращает управление от функции, которая создает диалоговое окно, пока процедура диалогового окна не вызовет функцию EndDialog .
Немодальные диалоговые окна
Немодальное диалоговое окно должно быть всплывающим окном, имеющим меню окна, строку заголовка и тонкую рамку; то есть шаблон диалогового окна должен указывать стили WS_POPUP , WS_CAPTION , WS_BORDER и WS_SYSMENU . Система не отображает автоматически диалоговое окно, если в шаблоне не указан стиль WS_VISIBLE .
Приложение создает немодальное диалоговое окно с помощью функции CreateDialog или CreateDialogIndirect . CreateDialog требует имя или идентификатор ресурса, содержащего шаблон диалогового окна; CreateDialogIndirect требуется дескриптор объекта памяти, содержащего шаблон диалогового окна. Две другие функции, CreateDialogParam и CreateDialogIndirectParam , также создают немодальные диалоговые окна; они передают указанный параметр процедуре диалогового окна при создании диалогового окна.
CreateDialog и другие функции создания возвращают дескриптор окна в диалоговое окно. Приложение и процедура диалогового окна могут использовать этот дескриптор для управления диалоговым окном. Например, если WS_VISIBLE не указан в шаблоне диалогового окна, приложение может отобразить диалоговое окно, передав дескриптор окна в функцию ShowWindow .
Немодальное диалоговое окно не отключает окно владельца и не отправляет ему сообщения. При создании диалогового окна система делает его активным окном, но пользователь или приложение могут изменить активное окно в любое время.Если диалоговое окно действительно становится неактивным, оно остается над окном владельца в Z-порядке, даже если окно владельца активно.
Приложение отвечает за получение и отправку сообщений ввода в диалоговое окно. Большинство приложений используют для этого основной цикл сообщений. Однако, чтобы разрешить пользователю переходить к элементам управления и выбирать их с помощью клавиатуры, приложение должно вызывать функцию IsDialogMessage . Для получения дополнительной информации об этой функции см. Интерфейс клавиатуры диалогового окна.
Немодальное диалоговое окно не может возвращать значение в приложение, как это делает модальное диалоговое окно, но процедура диалогового окна может отправлять информацию в окно владельца с помощью функции SendMessage .
Перед завершением приложение должно уничтожить все немодальные диалоговые окна. Он может уничтожить немодальное диалоговое окно с помощью функции DestroyWindow . В большинстве случаев процедура диалогового окна вызывает DestroyWindow в ответ на вводимые пользователем данные, такие как нажатие кнопки Отмена .Если пользователь никогда не закрывает диалоговое окно таким образом, приложение должно вызвать DestroyWindow .
DestroyWindow делает недействительным дескриптор окна диалогового окна, поэтому любые последующие вызовы функций, которые используют этот дескриптор, возвращают значения ошибки. Чтобы предотвратить ошибки, процедура диалогового окна должна уведомить владельца о том, что диалоговое окно было уничтожено. Многие приложения поддерживают глобальную переменную, содержащую дескриптор диалогового окна. Когда процедура диалогового окна разрушает диалоговое окно, она также устанавливает для глобальной переменной значение NULL , указывая на то, что диалоговое окно больше недействительно.
Процедура диалогового окна не должна вызывать функцию EndDialog для уничтожения немодального диалогового окна.
Шаблоны диалоговых окон
Шаблон диалогового окна - это двоичные данные, описывающие диалоговое окно, определяющие его высоту, ширину, стиль и элементы управления, которые оно содержит. Чтобы создать диалоговое окно, система либо загружает шаблон диалогового окна из ресурсов в исполняемом файле приложения, либо использует шаблон, переданный ему в глобальной памяти приложением.В любом случае приложение должно предоставить шаблон при создании диалогового окна.
Разработчик создает ресурсы шаблона с помощью компилятора ресурсов или редактора диалоговых окон. Компилятор ресурсов преобразует текстовое описание в двоичный ресурс, а редактор диалогового окна сохраняет диалоговое окно, построенное в интерактивном режиме, как двоичный ресурс.
Примечание
Объяснение того, как создавать ресурсы шаблона и добавлять их в исполняемый файл приложения, выходит за рамки этого обзора.Дополнительные сведения о создании ресурсов шаблона и добавлении их в исполняемый файл см. В документации, прилагаемой к средствам разработки приложений.
Чтобы создать диалоговое окно без использования ресурсов шаблона, необходимо создать шаблон в памяти и передать его функции CreateDialogIndirectParam или DialogBoxIndirectParam или макросу CreateDialogIndirect или DialogBoxIndirect .
Шаблон диалогового окна в памяти состоит из заголовка, описывающего диалоговое окно, за которым следует один или несколько дополнительных блоков данных, которые описывают каждый из элементов управления в диалоговом окне.Шаблон может использовать как стандартный, так и расширенный формат. В стандартном шаблоне заголовок представляет собой структуру DLGTEMPLATE , за которой следуют дополнительные массивы переменной длины; и данные для каждого элемента управления состоят из структуры DLGITEMTEMPLATE , за которой следуют дополнительные массивы переменной длины. В шаблоне расширенного диалогового окна заголовок использует формат DLGTEMPLATEEX , а определения элементов управления используют формат DLGITEMTEMPLATEEX .
Вы можете создать шаблон памяти, выделив объект глобальной памяти и заполнив его стандартным или расширенным заголовком и определениями элементов управления.Шаблон памяти идентичен по форме и содержанию шаблонному ресурсу. Многие приложения, которые используют шаблоны памяти, сначала используют функцию LoadResource для загрузки ресурса шаблона в память, а затем модифицируют загруженный ресурс для создания нового шаблона памяти. Дополнительные сведения о создании шаблона диалогового окна в памяти см. В разделе «Шаблоны в памяти».
В следующих разделах описываются стили, измерения и другие значения, используемые в шаблоне диалогового окна.
Стили шаблона диалогового окна
Каждый шаблон диалогового окна определяет комбинацию значений стиля, которые определяют внешний вид и особенности диалогового окна.Значения стиля могут быть стилями окна, такими как WS_POPUP и WS_SYSMENU , и стилями диалоговых окон, такими как DS_MODALFRAME . Количество и тип стилей для шаблона зависит от типа и назначения диалогового окна. Список значений см. В разделе Стили диалогового окна .
Система передает все стили окна, указанные в шаблоне, в функцию CreateWindowEx при создании диалогового окна. Система может передавать один или несколько расширенных стилей в зависимости от заданных стилей диалогового окна.Например, когда в шаблоне указано DS_MODALFRAME , система использует WS_EX_DLGMODALFRAME при создании диалогового окна.
Большинство диалоговых окон - это всплывающие окна, которые имеют меню окна и строку заголовка. Следовательно, типичный шаблон определяет стили WS_POPUP , WS_SYSMENU и WS_CAPTION . Шаблон также определяет стиль границы: WS_BORDER для немодальных диалоговых окон и DS_MODALFRAME для модальных диалоговых окон.Шаблон может указывать тип окна, отличный от всплывающего (например, WS_OVERLAPPED ), если он создает настраиваемое окно вместо диалогового окна.
Система всегда отображает модальное диалоговое окно независимо от того, указан ли стиль WS_VISIBLE . Если в шаблоне немодального диалогового окна указан стиль WS_VISIBLE , система автоматически отображает диалоговое окно при его создании. В противном случае приложение отвечает за отображение диалогового окна с помощью функции ShowWindow .
Диалоговое окно Измерения
Каждый шаблон диалогового окна содержит измерения, которые определяют положение, ширину и высоту диалогового окна и содержащихся в нем элементов управления. Эти измерения не зависят от устройства, поэтому приложение может использовать один шаблон для создания одного и того же диалогового окна для всех типов устройств отображения. Это гарантирует, что диалоговое окно будет иметь одинаковые пропорции и внешний вид на всех экранах, несмотря на различное разрешение и соотношение сторон экрана.
Размеры в шаблоне диалогового окна задаются в единицах измерения шаблона диалогового окна. Чтобы преобразовать измерения из единиц шаблона диалогового окна в единицы экрана (пиксели), используйте функцию MapDialogRect , которая учитывает шрифт, используемый диалоговым окном, и правильно преобразует прямоугольник из единиц шаблона диалогового окна в пиксели. Для диалоговых окон, использующих системный шрифт, вы можете использовать функцию GetDialogBaseUnits для самостоятельного выполнения расчетов преобразования, хотя использование MapDialogRect проще.
В шаблоне должны быть указаны начальные координаты левого верхнего угла диалогового окна. Обычно координаты указываются относительно левого верхнего угла клиентской области окна владельца. Если в шаблоне указан стиль DS_ABSALIGN или диалоговое окно не имеет владельца, позиция определяется относительно левого верхнего угла экрана. Система устанавливает это исходное положение при создании диалогового окна, но позволяет приложению настраивать положение перед отображением диалогового окна.Например, приложение может получить размеры окна владельца, вычислить новое положение, которое центрирует диалоговое окно в окне владельца, а затем установить положение с помощью функции SetWindowPos .
Шаблон должен указывать ширину и высоту диалогового окна, которые не превышают ширину и высоту экрана и гарантируют, что все элементы управления находятся в клиентской области диалогового окна. Хотя система позволяет диалоговому окну иметь любой размер, создание слишком маленького или слишком большого может помешать пользователю вводить данные, что противоречит цели диалогового окна.Многие приложения используют более одного диалогового окна при большом количестве элементов управления. В таких случаях начальное диалоговое окно обычно содержит одну или несколько кнопок, которые пользователь может выбрать для отображения следующего диалогового окна.
Элементы управления диалогового окна
Шаблон определяет положение, ширину, высоту, стиль, идентификатор и класс окна для каждого элемента управления в диалоговом окне. Система создает каждый элемент управления, передавая эти данные в функцию CreateWindowEx . Элементы управления создаются в том порядке, в котором они указаны в шаблоне.В шаблоне следует указать соответствующее количество, тип и порядок элементов управления, чтобы пользователь мог вводить данные, необходимые для выполнения задачи, связанной с диалоговым окном.
Для каждого элемента управления в шаблоне указываются значения стиля, которые определяют внешний вид и работу элемента управления. Каждый элемент управления является дочерним окном и поэтому должен иметь стиль WS_CHILD . Чтобы обеспечить видимость элемента управления при отображении диалогового окна, каждый элемент управления также должен иметь стиль WS_VISIBLE .Другие часто используемые стили окна: WS_BORDER для элементов управления с дополнительными границами, WS_DISABLED для элементов управления, которые должны быть отключены при первоначальном создании диалогового окна, и WS_TABSTOP и WS_GROUP для элементов управления, к которым можно получить доступ с клавиатуры. . Стили WS_TABSTOP и WS_GROUP используются вместе с диалоговым интерфейсом клавиатуры, описанным далее в этом разделе.
В шаблоне также могут быть указаны стили управления, специфичные для класса окна элемента управления.Например, шаблон, определяющий элемент управления кнопки, должен предоставлять стиль элемента управления кнопки, такой как BS_PUSHBUTTON или BS_CHECKBOX . Система передает стили управления в процедуру окна управления через сообщение WM_CREATE , позволяя процедуре адаптировать внешний вид и работу элемента управления.
Система преобразует координаты положения и измерения ширины и высоты из базовых единиц диалогового окна в пиксели перед передачей их в CreateWindowEx .Когда система создает элемент управления, она определяет диалоговое окно в качестве родительского окна. Это означает, что система всегда интерпретирует координаты положения элемента управления как клиентские координаты относительно левого верхнего угла клиентской области диалогового окна.
В шаблоне указывается класс окна для каждого элемента управления. Типичное диалоговое окно содержит элементы управления, принадлежащие к предопределенным классам окон управления, таким как классы кнопок и окон управления редактированием. В этом случае шаблон определяет классы окон, предоставляя соответствующие предопределенные значения атомов для классов.Когда диалоговое окно содержит элемент управления, принадлежащий классу окна настраиваемого элемента управления, шаблон дает имя этого зарегистрированного класса окна или значение атома, связанное с этим именем в данный момент.
Каждый элемент управления в диалоговом окне должен иметь уникальный идентификатор, чтобы отличать его от других элементов управления. Элементы управления отправляют информацию в процедуру диалогового окна через сообщения WM_COMMAND , поэтому идентификаторы элементов управления важны для процедуры, чтобы определить, какой элемент управления отправил указанное сообщение.Единственным исключением из этого правила являются идентификаторы элементов управления для статических элементов управления. Статические элементы управления не требуют уникальных идентификаторов, потому что они не отправляют сообщения WM_COMMAND .
Чтобы пользователь мог закрыть диалоговое окно, в шаблоне следует указать по крайней мере одну кнопку и дать ей управляющий идентификатор IDCANCEL . Чтобы позволить пользователю выбирать между завершением или отменой задачи, связанной с диалоговым окном, в шаблоне должны быть указаны две кнопки, помеченные как OK и Отмена , с управляющими идентификаторами IDOK и IDCANCEL соответственно.
Шаблон также определяет необязательный текст и данные создания для элемента управления. Текст обычно предоставляет метки для кнопок управления или определяет начальное содержимое статического текстового элемента управления. Данные создания - это один или несколько байтов данных, которые система передает процедуре окна управления при создании элемента управления. Данные создания полезны для элементов управления, которым требуется больше информации об их исходном содержании или стиле, чем указано в других данных. Например, приложение может использовать данные создания, чтобы задать начальную настройку и диапазон для элемента управления полосой прокрутки.
Меню окна диалогового окна
Система выдает диалоговое окно меню окна, если в шаблоне указан стиль WS_SYSMENU . Чтобы предотвратить неправильный ввод, система автоматически отключает все элементы в меню, кроме Move и Close . Пользователь может щелкнуть Переместить , чтобы переместить диалоговое окно. Когда пользователь нажимает Close , система отправляет сообщение WM_COMMAND в процедуру диалогового окна с параметром wParam , установленным на IDCANCEL .Это идентично сообщению, отправляемому кнопкой Отмена , когда пользователь нажимает на нее. Рекомендуемое действие для этого сообщения - закрыть диалоговое окно и отменить запрошенную задачу.
Хотя использование других меню в диалоговых окнах не рекомендуется, шаблон диалогового окна может определять меню, предоставляя идентификатор или имя ресурса меню. В этом случае система загружает ресурс и создает меню для диалогового окна. Приложения обычно используют идентификаторы меню или имена в шаблонах при использовании шаблонов для создания пользовательских окон, а не диалоговых окон.
Шрифты диалогового окна
Система использует среднюю ширину символа шрифта диалогового окна для расчета положения и размеров диалогового окна. По умолчанию система рисует весь текст в диалоговом окне с использованием шрифта SYSTEM_FONT .
Чтобы указать шрифт для диалогового окна, отличный от шрифта по умолчанию, вы должны создать диалоговое окно, используя шаблон диалогового окна. В ресурсе шаблона используйте оператор FONT. В шаблоне диалогового окна установите стиль DS_SETFONT или DS_SHELLFONT и укажите размер шрифта и имя гарнитуры.Даже если шаблон диалогового окна определяет шрифт таким образом, система всегда использует системный шрифт для заголовка диалогового окна и меню диалогового окна.
Когда диалоговое окно имеет стиль DS_SETFONT или DS_SHELLFONT , система отправляет сообщение WM_SETFONT процедуре диалогового окна и каждому элементу управления при создании элемента управления. Процедура диалогового окна отвечает за сохранение дескриптора шрифта, переданного с сообщением WM_SETFONT , и за выбор дескриптора в контексте устройства отображения всякий раз, когда он записывает текст в окно.Стандартные элементы управления делают это по умолчанию.
Системный шрифт может различаться в разных версиях Windows. Чтобы ваше приложение использовало системный шрифт независимо от того, на какой системе оно запущено, используйте DS_SHELLFONT с гарнитурой MS Shell Dlg и используйте ресурс DIALOGEX вместо ресурса DIALOG. Система отображает этот шрифт таким образом, что в вашем диалоговом окне будет использоваться шрифт Tahoma. Обратите внимание, что DS_SHELLFONT не действует, если шрифт не MS Shell Dlg.
Шаблонов в памяти
Шаблон диалогового окна в памяти состоит из заголовка, описывающего диалоговое окно, за которым следует один или несколько дополнительных блоков данных, которые описывают каждый из элементов управления в диалоговом окне.Шаблон может использовать как стандартный, так и расширенный формат. В стандартном шаблоне заголовок представляет собой структуру DLGTEMPLATE , за которой следуют дополнительные массивы переменной длины. Данные для каждого элемента управления состоят из структуры DLGITEMTEMPLATE , за которой следуют дополнительные массивы переменной длины. В шаблоне расширенного диалогового окна заголовок использует формат DLGTEMPLATEEX , а определения элементов управления используют формат DLGITEMTEMPLATEEX .
Чтобы отличить стандартный шаблон от расширенного, отметьте первые 16 битов шаблона диалогового окна.В расширенном шаблоне первым WORD является 0xFFFF; любое другое значение указывает на стандартный шаблон.
Если вы создаете шаблон диалогового окна в памяти, вы должны убедиться, что каждое из определений элемента управления DLGITEMTEMPLATE или DLGITEMTEMPLATEEX выровнено по границам DWORD . Кроме того, любые данные создания, следующие за определением элемента управления, должны быть выровнены по границе DWORD . Все остальные массивы переменной длины в шаблоне диалогового окна должны быть выровнены по границам WORD .
Заголовок шаблона
Как в стандартном, так и в расширенном шаблонах для диалоговых окон заголовок содержит следующую общую информацию:
- Расположение и размеры диалогового окна
- Стили окна и диалогового окна для диалогового окна
- Количество элементов управления в диалоговом окне. Это значение определяет количество определений элемента управления DLGITEMTEMPLATE или DLGITEMTEMPLATEEX в шаблоне.
- Необязательный ресурс меню для диалогового окна.Шаблон может указывать, что диалоговое окно не имеет меню, или он может указывать порядковое значение или строку Unicode с завершающим нулем, которая идентифицирует ресурс меню в исполняемом файле.
- Класс окна диалогового окна. Это может быть либо предопределенный класс диалогового окна, либо порядковое значение, либо строка Unicode с завершающим нулем, которая идентифицирует зарегистрированный класс окна.
- Строка Unicode с завершающим нулем, которая определяет заголовок окна диалогового окна. Если строка пуста, строка заголовка диалогового окна пуста.Если диалоговое окно не имеет стиля WS_CAPTION , система устанавливает заголовок для указанной строки, но не отображает его.
- Если диалоговое окно имеет стиль DS_SETFONT , заголовок определяет размер шрифта и название гарнитуры шрифта, используемого для текста в клиентской области и элементах управления диалогового окна.
В расширенном шаблоне заголовок DLGTEMPLATEEX также указывает следующую дополнительную информацию:
- Идентификатор контекста справки окна диалогового окна, когда система отправляет сообщение WM_HELP .
- Если диалоговое окно имеет стиль DS_SETFONT или DS_SHELLFONT , заголовок определяет толщину шрифта и указывает, является ли шрифт курсивным.
Определения элементов управления
За заголовком шаблона следует одно или несколько определений элементов управления, которые описывают элементы управления диалогового окна. Как в стандартном, так и в расширенном шаблонах заголовок диалогового окна имеет член, который указывает количество определений элементов управления в шаблоне. В стандартном шаблоне каждое определение элемента управления состоит из структуры DLGITEMTEMPLATE , за которой следуют дополнительные массивы переменной длины.В расширенном шаблоне определения элементов управления используют формат DLGITEMTEMPLATEEX .
Как в стандартном, так и в расширенном шаблонах определение элемента управления включает следующую информацию:
- Расположение и размеры элемента управления.
- Окно и стили элемента управления для элемента управления.
- Идентификатор элемента управления.
- Класс окна элемента управления. Это может быть либо порядковое значение предопределенного системного класса, либо строка Unicode с завершающим нулем, которая указывает имя зарегистрированного класса окна.
- Строка Unicode с завершающим нулем, которая задает начальный текст элемента управления или порядковое значение, которое идентифицирует ресурс, например значок, в исполняемом файле.
- Необязательный блок данных создания переменной длины. Когда система создает элемент управления, она передает указатель на эти данные в параметре lParam сообщения WM_CREATE , которое она отправляет элементу управления.
В расширенном шаблоне определение элемента управления также указывает идентификатор контекста справки для элемента управления, когда система отправляет сообщение WM_HELP .
.
Диалоговые окна «Открыть и сохранить как» - приложения Win32
- 22 минуты на чтение
В этой статье
[Начиная с Windows Vista, общие диалоговые окна Открыть и Сохранить как были заменены диалоговым окном Common Item. Мы рекомендуем вам использовать API диалоговых окон Common Item вместо этих диалоговых окон из библиотеки Common Dialog Box.]
Диалоговое окно Открыть позволяет пользователю указать диск, каталог и имя файла или набора файлов для открытия. Вы создаете и отображаете диалоговое окно Открыть , инициализируя структуру OPENFILENAME и передав ее в функцию GetOpenFileName .
Диалоговое окно Сохранить как позволяет пользователю указать диск, каталог и имя файла для сохранения. Вы создаете и отображаете диалоговое окно Сохранить как , инициализируя структуру OPENFILENAME и передавая ее в функцию GetSaveFileName .
в стиле проводника Открыть диалоговые окна и Сохранить как предоставляют функции пользовательского интерфейса, аналогичные проводнику Windows. Тем не менее, система продолжает поддерживать диалоговые окна Открыть и Сохранить как старого стиля для приложений, которые должны согласовываться с пользовательским интерфейсом старого стиля.
Помимо разницы во внешнем виде, диалоговые окна в стиле Проводника и в старом стиле отличаются использованием пользовательских шаблонов и процедур обработки для настройки диалоговых окон.Однако диалоговые окна в стиле проводника и в старом стиле ведут себя одинаково для большинства основных операций, таких как определение фильтра имени файла, проверка ввода пользователя и получение имени файла, указанного пользователем. Дополнительные сведения о диалоговых окнах в стиле проводника и в старом стиле см. В разделе Настройка диалогового окна «Открыть и сохранить как».
На следующем рисунке показано типичное диалоговое окно Открыть в стиле проводника.
На следующем рисунке показано типичное диалоговое окно Сохранить как в стиле проводника.
Если пользователь указывает имя файла и нажимает кнопку OK , GetOpenFileName или GetSaveFileName возвращает TRUE . Буфер, на который указывает член lpstrFile структуры OPENFILENAME , содержит полный путь и имя файла, указанные пользователем.
Если пользователь закрывает диалоговое окно Открыть или Сохранить как или возникает ошибка, функция возвращает FALSE .Чтобы определить причину ошибки, вызовите функцию CommDlgExtendedError , чтобы получить расширенное значение ошибки. Если буфер lpstrFile слишком мал для получения полного имени, CommDlgExtendedError возвращает FNERR_BUFFERTOOSMALL , а первые 2 байта буфера, на которые указывает член lpstrFile , устанавливаются в целочисленное значение, определяющее размер, необходимый для получения полное имя.
В этом разделе обсуждаются следующие темы.
Имена файлов и каталоги
Информация в этом разделе применима к диалоговым окнам Открыть и Сохранить как как в стиле проводника, так и в старом стиле.
Перед вызовом функций GetOpenFileName или GetSaveFileName член lpstrFile структуры OPENFILENAME должен указывать на буфер для получения имени файла. Член nMaxFile должен указывать размер в символах буфера lpstrFile .Для функции ANSI это количество байтов, но для функции Unicode это количество символов.
Если пользователь указывает имя файла и нажимает кнопку OK , диалоговое окно копирует выбранный диск, каталог и имя файла в буфер lpstrFile . Функция также устанавливает для членов nFileOffset и nFileExtension смещения в символах от начала буфера до имени файла и расширения имени файла соответственно.
Чтобы получить только имя и расширение файла, установите член lpstrFileTitle так, чтобы он указывал на буфер, и установите член nMaxFileTitle равным размеру буфера в символах. В качестве альтернативы можно передать буфер lpstrFile в вызове функции GetFileTitle , чтобы получить отображаемое имя выбранного файла. Обратите внимание, однако, что имя файла, которое возвращает GetFileTitle , включает расширение только в том случае, если это предпочтение пользователя для отображения имен файлов.
Диалоговое окно использует текущий каталог для вызывающего процесса как начальный каталог, из которого будут отображаться файлы и каталоги. Используйте функции GetCurrentDirectory и SetCurrentDirectory для получения и изменения текущего каталога процесса. Чтобы указать другой исходный каталог без изменения текущего каталога, используйте член lpstrInitialDir , чтобы указать имя каталога. Диалоговое окно автоматически изменяет ваш текущий каталог, когда пользователь выбирает другой диск или каталог.Чтобы предотвратить изменение текущего каталога в диалоговом окне, установите флаг OFN_NOCHANGEDIR . Этот флаг не запрещает пользователю менять каталоги для поиска файла.
Чтобы указать расширение имени файла по умолчанию, используйте элемент lpstrDefExt . Если пользователь указывает имя файла, которое не имеет расширения, в диалоговом окне добавляется расширение по умолчанию. Если вы указываете расширение по умолчанию, а пользователь указывает имя файла с другим расширением, диалоговое окно устанавливает флаг OFN_EXTENSIONDIFFERENT .
Чтобы позволить пользователю выбрать более одного файла из каталога, установите флаг OFN_ALLOWMULTISELECT . Для совместимости со старыми приложениями в диалоговом окне множественного выбора по умолчанию используется пользовательский интерфейс старого стиля. Чтобы отобразить диалоговое окно множественного выбора в стиле проводника, необходимо также установить флаг OFN_EXPLORER .
Если пользователь выбирает более одного файла, буфер, на который указывает член lpstrFile , возвращает путь к текущему каталогу, за которым следуют имена файлов выбранных файлов.Член nFileOffset - это смещение к имени первого файла, а член nFileExtension не используется. В следующей таблице описана разница между диалоговыми окнами в стиле проводника и диалоговыми окнами старого стиля при возврате нескольких имен файлов.
Стиль диалогового окна | Описание |
---|---|
Диалоговые окна в стиле проводника | Строки каталога и имени файла разделены NULL и с дополнительным символом NULL после имени последнего файла.Этот формат позволяет диалоговым окнам в стиле проводника возвращать длинные имена файлов, содержащие пробелы. |
Диалоговые окна в старом стиле | Строки имени каталога и файла разделяются пробелами. Для имен файлов с пробелами функция использует короткие имена файлов. |
Вы можете использовать функцию FindFirstFile для преобразования длинных и коротких имен файлов.
Если вы указываете OFN_ALLOWMULTISELECT и пользователь выбирает только один файл, строка lpstrFile не имеет разделителя между путем и именем файла.
Фильтры
Информация в этом разделе применима как к диалоговым окнам в стиле проводника, так и к старому. Открыть и Сохранить как .
Вы можете предоставить фильтры имен файлов, чтобы помочь пользователю ограничить имена файлов, отображаемых в диалоговом окне. Фильтр имени файла состоит из пары строк с завершающим нулем, описания и шаблона, соединенных друг с другом. В диалоговом окне отображается описание, позволяющее пользователю выбрать, какой фильтр использовать; и он использует шаблон для выбора файлов для отображения.
Чтобы указать фильтры, установите элемент lpstrFilter структуры OPENFILENAME так, чтобы он указывал на буфер, содержащий массив пар строк фильтра. За последней строкой в массиве должен следовать дополнительный нулевой символ.
Строка шаблона может быть комбинацией допустимых символов имени файла и звездочки (*). Звездочка - это подстановочный знак, который представляет любую комбинацию допустимых символов имени файла. В диалоговом окне отображаются только те файлы, которые соответствуют шаблону.Чтобы указать несколько шаблонов для одного и того же описания, вы должны использовать точку с запятой (;) для разделения шаблонов. Обратите внимание, что пробелы в строке шаблона могут привести к неожиданным результатам.
Следующий фрагмент кода определяет два фильтра. Фильтр с описанием «Источник» имеет два шаблона. Если пользователь выбирает этот фильтр, в диалоговом окне отображаются только файлы с расширениями .C и .CXX. Обратите внимание, что в языке программирования C строка, заключенная в двойные кавычки, заканчивается нулем.
OPENFILENAME ofn; // общая структура диалогового окна ofn.lpstrFilter = "Источник \ 0 * .C; *. CXX \ 0All \ 0 *. * \ 0" ofn.nFilterIndex = 1;
Член nFilterIndex структуры OPENFILENAME определяет индекс, который указывает, какой фильтр изначально использует диалоговое окно. Первый фильтр в буфере имеет индекс 1, второй - 2 и так далее. Если пользователь изменяет фильтр во время использования диалогового окна, элемент nFilterIndex устанавливается равным индексу выбранного фильтра при возврате.
Вы можете создать собственный фильтр, установив для члена lpstrCustomFilter адрес буфера, который содержит единственный фильтр, и установив для члена nMaxCustFilter размер буфера в символах или байтах. Диалоговое окно всегда помещает настраиваемый фильтр в начало списка фильтров и, по возвращении, всегда обновляет часть шаблона фильтра шаблоном из фильтра, выбранного пользователем.
Для диалоговых окон в стиле проводника расширение по умолчанию может измениться, если пользователь выберет другой фильтр.Если пользователь выбирает фильтр, первый шаблон которого имеет форму *. xxx (то есть расширение не включает подстановочный знак), диалоговое окно использует xxx в качестве расширения по умолчанию. Это происходит только в том случае, если вы указали расширение по умолчанию в члене lpstrDefExt структуры OPENFILENAME . Например, если пользователь выбирает фильтр «Источник \ 0 * .C; *. CXX \ 0», расширение по умолчанию изменяется на «C». Однако, если вы определили фильтр как «Источник \ 0 *.C * \ 0 ", расширение по умолчанию не изменится, потому что расширение содержит подстановочный знак.
Уведомляющее сообщение CDN_INCLUDEITEM предоставляет другой способ фильтрации имен, отображаемых в диалоговом окне. Чтобы использовать это сообщение, предоставьте подключаемую процедуру OFNHookProc и укажите флаг OFN_ENABLEINCLUDENOTIFY в структуре OPENFILENAME при создании диалогового окна. Каждый раз, когда пользователь открывает папку, диалоговое окно отправляет уведомление CDN_INCLUDEITEM вашей подключаемой процедуре для каждого элемента во вновь открытой папке.Возвращаемое значение подключаемой процедуры указывает, должно ли диалоговое окно отображать элемент в списке элементов папки.
Проверка файлов и каталогов
Если не указано иное, информация в этом разделе применима как к диалоговым окнам в стиле проводника, так и к старым. Открыть и Сохранить как .
Диалоговое окно автоматически проверяет имена файлов, введенные пользователем, чтобы гарантировать, что имена содержат только допустимые символы. Чтобы отменить проверку символа имени файла, установите флаг OFN_NOVALIDATE .
Чтобы заставить диалоговое окно проверять, что пользователь указал имя существующего файла, установите флаг OFN_FILEMUSTEXIST . Чтобы принудительно подтвердить, что указанный путь существует, установите флаг OFN_PATHMUSTEXIST . Если вы установите флаг OFN_CREATEPROMPT , диалоговое окно запрашивает у пользователя разрешение на создание несуществующего файла. Если этот флаг установлен, и пользователь решает создать новый файл, диалоговое окно закрывается, и функция возвращает указанное имя.В противном случае диалоговое окно останется открытым.
При использовании диалогового окна Сохранить как вы можете указать диалоговому окну запросить у пользователя разрешение на перезапись существующего файла, установив флаг OFN_OVERWRITEPROMPT .
По умолчанию диалоговое окно создает тестовый файл нулевой длины, чтобы определить, можно ли создать новый файл в выбранном каталоге. Чтобы предотвратить создание этого тестового файла, установите флаг OFN_NOTESTFILECREATE .
Если вы активируете подключаемую процедуру, диалоговое окно уведомляет вашу подключаемую процедуру, когда происходит нарушение совместного использования сети для имени файла, указанного пользователем.Если вы установите флаг OFN_EXPLORER , диалоговое окно отправит сообщение CDN_SHAREVIOLATION в подключаемую процедуру. Если вы не установите OFN_EXPLORER , диалоговое окно отправит зарегистрированное сообщение SHAREVISTRING в подключаемую процедуру. Чтобы диалоговое окно не отправляло никаких уведомлений о нарушениях совместного использования, установите флаг OFN_SHAREAWARE .
Если пользователь устанавливает флажок только для чтения, диалоговое окно устанавливает флаг OFN_READONLY при возврате.Чтобы скрыть флажок Открыть только для чтения , установите флаг OFN_HIDEREADONLY . Чтобы диалоговое окно не возвращало имена существующих файлов, имеющих атрибут только для чтения, установите флаг OFN_NOREADONLYRETURN .
Чтобы предотвратить разыменование файлов ссылок в диалоговом окне, установите значение OFN_NODEREFERENCELINKS . В этом случае диалоговое окно возвращает имя файла ссылки, а не имя файла, на который ссылается файл ссылки.
Настройка диалогового окна "Открыть и сохранить как"
Вы можете настроить диалоговое окно Открыть или Сохранить как , предоставив подключаемую процедуру, настраиваемый шаблон или и то, и другое.Однако версии диалоговых окон в стиле проводника и в старом стиле отличаются использованием настраиваемых шаблонов и подключаемых процедур.
Для получения информации о настройке диалогового окна в стиле проводника см. Процедуры перехвата в стиле проводника, Пользовательские шаблоны в стиле проводника и Идентификаторы элементов управления в стиле проводника. Для получения информации о настройке диалогового окна в старом стиле см. Настройка диалоговых окон в старом стиле.
В следующей таблице приведены различия между двумя стилями.
Настройка | Описание |
---|---|
Процедура зацепа в стиле Explorer | Подключаемая процедура получает сообщения уведомления, отправленные из общего диалогового окна, и сообщения для любых дополнительных элементов управления, которые вы определили, указав шаблон дочернего диалогового окна. Подключаемая процедура не получает сообщения для стандартных элементов управления диалогового окна по умолчанию. |
Пользовательский шаблон в стиле проводника | Система использует настраиваемый шаблон для создания дочернего диалогового окна.Шаблон может определять дополнительные элементы управления и может указывать расположение кластера стандартных элементов управления. Пользовательский шаблон не заменяет шаблон по умолчанию. |
Процедура крючка по старому стилю | Подключаемая процедура получает все сообщения, отправленные в диалоговое окно, включая сообщения для стандартных элементов управления и любых настраиваемых элементов управления. Подключаемая процедура также получает зарегистрированные сообщения, отправленные из общего диалогового окна. |
Пользовательский шаблон в старом стиле | Пользовательский шаблон заменяет шаблон по умолчанию.Создайте собственный шаблон, изменив шаблон по умолчанию, указанный в файле Fileopen.dlg. |
Заголовок по умолчанию для диалоговых окон в стиле проводника и в старом стиле: « Открыть » или « Сохранить как ». Чтобы изменить заголовок, укажите новый заголовок в члене lpstrTitle структуры OPENFILENAME .
Куст реестра HKEY_CURRENT_USER пользователя может содержать значения, которые настраивают содержимое диалоговых окон Открыть и Сохранить как в стиле проводника.Эти записи реестра влияют только на диалоговые окна, отображаемые для пользователя, связанного с кустом реестра.
Чтобы скрыть функции в стиле проводника Открыть диалоговые окна и Сохранить как , администратор может установить значения в следующей таблице под этим подразделом:
HKEY_CURRENT_USER Программное обеспечение Microsoft Windows Текущая версия Политики Comdlg32
Имя значения | Значение | Значение |
---|---|---|
NoPlacesBar | 1 | Скрывает панель мест. |
NoFileMRU | 1 | Скрывает список самых последних использованных (MRU). |
NoBackButton | 1 | Скрывает кнопку Назад . |
Содержимое строки Places определяется содержимым следующего подраздела:
HKEY_CURRENT_USER Программное обеспечение Microsoft Windows Текущая версия Политики Comdlg32 Placesbar
В настоящее время под этим ключом может быть только пять записей, а индекс значение / имя отсчитывается от нуля.Имена записей должны быть Place0, Place1, Place2, Place3 и Place4. Значения записей могут быть значениями REG_DWORD , REG_SZ или REG_EXPAND_SZ , которые определяют местоположения для включения в панель мест.
Тип значения | Значение |
---|---|
REG_DWORD | Значение CSIDL, определяющее папку. Список значений CSIDL см. В разделе Значения CSIDL . |
REG_SZ или REG_EXPAND_SZ | Строка с завершающим нулем, указывающая допустимый путь. |
Процедуры перехвата в стиле Explorer
Вы можете настроить диалоговое окно Открыть или Сохранить как в стиле проводника, предоставив подключаемую процедуру, настраиваемый шаблон или и то, и другое. Если вы предоставляете подключаемую процедуру для диалогового окна в стиле проводника, система создает диалоговое окно, которое является дочерним по отношению к диалоговому окну по умолчанию. Подключаемая процедура действует как диалоговая процедура для дочернего диалогового окна. Это дочернее диалоговое окно основано на настраиваемом шаблоне или на шаблоне по умолчанию, если он не указан.Дополнительные сведения см. В разделе Пользовательские шаблоны в стиле проводника.
Чтобы включить подключаемую процедуру для диалогового окна Открыть или Сохранить как в стиле проводника, используйте структуру OPENFILENAME при создании диалогового окна. Установите флаги OFN_ENABLEHOOK и OFN_EXPLORER в элементе Flags и укажите адрес процедуры подключения OFNHookProc в элементе lpfnHook . Если вы предоставляете подключаемую процедуру и опускаете флаг OFN_EXPLORER , вы должны использовать подключаемую процедуру OFNHookProcOldStyle , и вы получите пользовательский интерфейс в старом стиле.Для получения дополнительной информации см. Настройка диалоговых окон в старом стиле.
Подключаемая процедура в стиле проводника получает множество сообщений, пока диалоговое окно открыто. К ним относятся следующие:
- Сообщение WM_INITDIALOG и другие сообщения стандартного диалогового окна, такие как сообщение управления цветом WM_CTLCOLORDLG .
- Набор сообщений уведомления WM_NOTIFY , указывающих действия, предпринятые пользователем, или другие события диалогового окна.
- Сообщения для любых дополнительных элементов управления, которые вы определили, указав шаблон дочернего диалогового окна.
Кроме того, существует набор сообщений, которые можно отправить в диалоговое окно в стиле проводника, чтобы получить информацию или управлять поведением и внешним видом диалогового окна.
Если вы предоставляете подключаемую процедуру для диалогового окна в стиле проводника, процедура диалогового окна по умолчанию создает дочернее диалоговое окно, когда диалоговая процедура по умолчанию обрабатывает свое сообщение WM_INITDIALOG . Подключаемая процедура действует как диалоговая процедура для дочернего диалогового окна. В это время подключаемая процедура получает собственное сообщение WM_INITDIALOG с параметром lParam , установленным на адрес структуры OPENFILENAME , используемой для инициализации диалогового окна.После того как дочернее диалоговое окно завершит обработку своего собственного сообщения WM_INITDIALOG , процедура диалогового окна по умолчанию перемещает стандартные элементы управления, если необходимо, чтобы освободить место для любых дополнительных элементов управления дочернего диалогового окна. Затем диалоговая процедура по умолчанию отправляет сообщение уведомления CDN_INITDONE в подключаемую процедуру.
Подключаемая процедура получает сообщений уведомления WM_NOTIFY , указывающих действия, предпринятые пользователем в диалоговом окне. Вы можете использовать некоторые из этих сообщений для управления поведением диалогового окна.Например, подключаемая процедура получает сообщение CDN_FILEOK , когда пользователь выбирает имя файла и нажимает кнопку OK . В ответ на это сообщение подключаемая процедура может использовать функцию SetWindowLong , чтобы отклонить выбранное имя и заставить диалоговое окно оставаться открытым.
Параметр lParam для каждого сообщения WM_NOTIFY является указателем на структуру OFNOTIFY или OFNOTIFYEX , которая определяет действие.Элемент code в заголовке этой структуры содержит одно из следующих уведомлений.
Сообщение | Значение |
---|---|
CDN_FILEOK | Пользователь нажал кнопку ОК ; диалоговое окно скоро закроется. |
CDN_FOLDERCHANGE | Пользователь открыл новую папку или каталог. |
CDN_HELP | Пользователь нажал кнопку Help . |
CDN_INCLUDEITEM | Определяет, следует ли отображать элемент. Когда пользователь открывает новую папку или каталог, система отправляет это уведомление для каждого элемента в папке или каталоге. Система отправляет это уведомление, только если установлен флаг OFN_ENABLEINCLUDENOTIFY . |
CDN_INITDONE | Система завершила инициализацию диалогового окна, и диалоговое окно завершило обработку сообщения WM_INITDIALOG .Кроме того, система завершила размещение элементов управления в общем диалоговом окне, чтобы освободить место для элементов управления дочернего диалогового окна (если есть). |
CDN_SELCHANGE | Пользователь выбрал новый файл или папку из списка файлов. |
CDN_SHAREVIOLATION | В общем диалоговом окне обнаружено нарушение совместного доступа к возвращаемому файлу. |
CDN_TYPECHANGE | Пользователь выбрал новый тип файла из списка типов файлов. |
Эти сообщения WM_NOTIFY заменяют зарегистрированные сообщения FILEOKSTRING , LBSELCHSTRING , SHAREVISTRING и HELPMSGSTRING , используемые предыдущими версиями диалоговых окон Открыть и Сохранить как . Однако подключаемая процедура также получает замененное сообщение после сообщения WM_NOTIFY , если обработка WM_NOTIFY не использует SetWindowLong для установки ненулевого значения DWL_MSGRESULT .
Чтобы получить информацию о состоянии диалогового окна или управлять поведением и внешним видом диалогового окна, подключаемая процедура может отправлять в диалоговое окно следующие сообщения.
Пользовательские шаблоны в стиле проводника
Чтобы определить дополнительные элементы управления для диалогового окна Открыть или Сохранить как в стиле проводника, используйте структуру OPENFILENAME , чтобы указать шаблон для дочернего диалогового окна, содержащего дополнительные элементы управления.Если ваш дочерний шаблон диалогового окна является ресурсом в приложении или библиотеке с динамической компоновкой, установите флаг OFN_ENABLETEMPLATE в элементе Flags и используйте элементы hInstance и lpTemplateName структуры для идентификации модуля и имени ресурса. . Если шаблон уже находится в памяти, установите флаг OFN_ENABLETEMPLATEHANDLE и используйте член hInstance для идентификации объекта памяти, который содержит шаблон. При предоставлении дочернего шаблона диалогового окна для диалогового окна в стиле проводника необходимо также установить флаг OFN_EXPLORER ; в противном случае система предполагает, что вы предоставляете шаблон замены для диалогового окна старого стиля.Обычно, если вы предоставляете дополнительные элементы управления, вы также должны предоставить подключаемую процедуру в стиле Explorer для обработки сообщений для новых элементов управления.
Вы можете создать дочерний шаблон диалогового окна, как и любой другой шаблон, за исключением того, что вы должны указать стили WS_CHILD и WS_CLIPSIBLINGS и должны указать стили DS_3DLOOK и DS_CONTROL . Системе требуется стиль WS_CHILD , поскольку ваш шаблон определяет дочерний диалог стандартного диалогового окна Открыть или Сохранить как .Стиль WS_CLIPSIBLINGS гарантирует, что дочернее диалоговое окно не закрашивает ни один из элементов управления в диалоговом окне по умолчанию. Стиль DS_3DLOOK обеспечивает соответствие внешнего вида элементов управления в дочернем диалоговом окне элементам управления в диалоговом окне по умолчанию. Стиль DS_CONTROL гарантирует, что пользователь может использовать TAB и другие навигационные клавиши для перемещения между всеми элементами управления, стандартными или настраиваемыми, в настраиваемом диалоговом окне.
Чтобы освободить место для новых элементов управления, система расширяет диалоговое окно по умолчанию на ширину и высоту настраиваемого диалогового окна.По умолчанию все элементы управления из настраиваемого диалогового окна располагаются под элементами управления в диалоговом окне по умолчанию. Однако вы можете переопределить это позиционирование по умолчанию, включив статический текстовый элемент управления в свой шаблон настраиваемого диалогового окна и присвоив ему значение идентификатора элемента управления stc32 . (Это значение определено в заголовочном файле Dlgs.h.) В этом случае система использует элемент управления как точку отсчета для определения места размещения новых элементов управления. Все новые элементы управления, расположенные выше и слева от элемента управления stc32 , располагаются на одинаковое количество выше и слева от элементов управления в диалоговом окне по умолчанию.Новые элементы управления ниже и справа от элемента управления stc32 расположены ниже и справа от элементов управления по умолчанию. В общем, каждый новый элемент управления позиционируется так, чтобы он имел такое же положение относительно элементов управления по умолчанию, как и элемент управления stc32 . Чтобы освободить место для этих новых элементов управления, система при необходимости добавляет пространство слева, справа, снизу и сверху диалогового окна по умолчанию.
Система требует, чтобы подключаемая процедура обрабатывала все сообщения, предназначенные для настраиваемого диалогового окна, и поэтому отправляет подключаемой процедуре те же оконные сообщения, что и к любой другой процедуре диалогового окна.Например, подключаемая процедура получает сообщений WM_COMMAND , когда пользователь нажимает кнопки управления в настраиваемом диалоговом окне. Подключаемая процедура отвечает за инициализацию этих элементов управления и получение значений из элементов управления при закрытии диалогового окна. Обратите внимание, что когда подключаемая процедура получает сообщение WM_INITDIALOG , система еще не переместила элементы управления в их конечные позиции.
Процедура диалогового окна по умолчанию обрабатывает сообщения для всех элементов управления в диалоговом окне по умолчанию, но подключаемая процедура получает сообщения с уведомлениями для действий пользователя с этими элементами управления, как описано в Процедурах привязки в стиле проводника.
Идентификаторы элементов управления в стиле проводника
Пакет разработки программного обеспечения Windows (SDK) предоставляет шаблон диалогового окна по умолчанию для диалоговых окон старого стиля, но не включает шаблон по умолчанию для диалоговых окон в стиле проводника. Это связано с тем, что диалоговые окна в стиле проводника позволяют добавлять собственные элементы управления, но не поддерживают изменение шаблона для стандартных элементов управления. Однако в некоторых случаях вам может потребоваться знать идентификаторы элементов управления, используемые в шаблонах по умолчанию.Например, сообщения CDM_HIDECONTROL и CDM_SETCONTROLTEXT требуют идентификатора управления.
В следующей таблице показаны идентификаторы стандартных элементов управления в диалоговых окнах Открыть и Сохранить как в стиле проводника. Идентификаторы - это константы, определенные в Dlgs.h и Winuser.h.
Идентификатор управления | Описание управления |
---|---|
chx1 | Флажок только для чтения |
куб.см1 | Раскрывающееся поле со списком, в котором отображается список фильтров типов файлов |
stc2 | Наклейка для комбинированного блока cmb1 |
куб.см | Выпадающее поле со списком, которое отображает текущий диск или папку и позволяет пользователю выбрать диск или папку для открытия |
stc4 | Наклейка для комбинированного блока cmb2 |
куб 13 | Выпадающее поле со списком, которое отображает имя текущего файла, позволяет пользователю ввести имя файла, который нужно открыть, и выбрать файл, который был открыт или сохранен недавно.Это для более ранних совместимых с проводником приложений без ловушки или шаблона диалога. Сравните с edt1 . |
edt1 | Элемент управления Edit, который отображает имя текущего файла или позволяет пользователю ввести имя файла для открытия. Сравните с cmb13 . |
stc3 | Метка для поля со списком cmb13 и элемента управления edt1 |
lst1 | Поле со списком, в котором отображается содержимое текущего диска или папки |
stc1 | Этикетка для списка lst1 |
IDOK | Командная кнопка OK (кнопка) |
IDCANCEL | Командная кнопка Отмена (кнопка) |
psh Помощь | Справка Командная кнопка (кнопка) |
Настройка диалоговых окон в старом стиле
Вы можете настроить диалоговое окно Open или Save As в старом стиле, предоставив подключаемую процедуру OFNHookProcOldStyle , которая получает сообщения или уведомления, предназначенные для процедуры диалогового окна по умолчанию.Вы также можете предоставить собственный шаблон для использования вместо шаблона по умолчанию. Подключаемые процедуры и шаблоны, используемые с диалоговыми окнами старого стиля, аналогичны тем, которые используются с другими общими диалоговыми окнами. Для получения дополнительной информации см. Процедуры перехвата для общих диалоговых окон и настраиваемых шаблонов.
Чтобы включить подключаемую процедуру для диалогового окна Открыть или Сохранить как старого стиля, используйте структуру OPENFILENAME при создании диалогового окна. Установите флаг OFN_ENABLEHOOK в элементе Flags и укажите адрес подключаемой процедуры OFNHookProcOldStyle в элементе lpfnHook .Процедура диалогового окна отправляет сообщение WM_INITDIALOG в подключаемую процедуру с параметром Param , установленным на адрес структуры OPENFILENAME , используемой для инициализации диалогового окна.
Вы можете использовать структуру OPENFILENAME , чтобы указать настраиваемый шаблон для диалогового окна Открыть или Сохранить как для использования вместо шаблона по умолчанию. Если ваш настраиваемый шаблон является ресурсом в приложении или библиотеке с динамической компоновкой, установите флаг OFN_ENABLETEMPLATE в элементе Flags и используйте элементы hInstance и lpTemplateName структуры для идентификации модуля и имени ресурса.Если ваш настраиваемый шаблон уже находится в памяти, установите флаг OFN_ENABLETEMPLATEHANDLE и используйте член hInstance для идентификации объекта памяти, который содержит шаблон. Создайте собственный шаблон, изменив шаблон по умолчанию, указанный в файле Fileopen.dlg. Идентификаторы элементов управления, используемые в шаблонах диалогового окна «Найти и заменить» по умолчанию, определены в файле Dlgs.h.
По умолчанию функции GetOpenFileName и GetSaveFileName отображают диалоговые окна в стиле проводника.Если вы хотите отобразить диалоговое окно в старом стиле, вы должны предоставить подключаемую процедуру OFNHookProcOldStyle и убедиться, что флаг OFN_EXPLORER не установлен в элементе Flags структуры OPENFILENAME .
Если вы установите флаг OFN_EXPLORER , система рассматривает подключаемую процедуру или настраиваемый шаблон как настройку в стиле проводника. Для получения информации о настройке диалогового окна в стиле проводника см. Пользовательские шаблоны в стиле проводника.
.Диалоговые окна
- Windows Forms
- 2 минуты на чтение
В этой статье
Диалоговые окна используются для взаимодействия с пользователем и получения информации. Проще говоря, диалоговое окно - это форма со свойством перечисления FormBorderStyle, установленным на FixedDialog
. Вы можете создавать свои собственные настраиваемые диалоговые окна с помощью конструктора Windows Forms в Visual Studio.Добавьте элементы управления, такие как Label
, Textbox
и Button
, чтобы настроить диалоговые окна в соответствии с вашими потребностями. .NET Framework также включает предопределенные диалоговые окна, такие как File Open и окна сообщений, которые вы можете адаптировать для своих собственных приложений. Дополнительные сведения см. В разделе «Элементы управления диалогового окна и компоненты».
В этом разделе
Как: отображать диалоговые окна для Windows Forms
Дает указания для отображения диалоговых окон.
Элементы управления и компоненты диалогового окна
Перечисляет предварительно определенные элементы управления диалогового окна.
Изменение внешнего вида Windows Forms
Содержит ссылки на разделы, в которых описано, как изменить внешний вид приложений Windows Forms.
Обзор элемента управления TabControl
Объясняет, как включить элемент управления Tab в диалоговое окно.