Диалоговое окно вызвать как
Каким образом можно вызвать диалоговое окно?
Каким образом можно вызвать диалоговое окно?
Ответ мастера:Как большинство из вас знает, что диалоговое окно представляет собой специальный интерфейс, благодаря которому в значительной степени упрощается процесс взаимодействия человека и машины. Такое окно содержит в своем составе определенные элементы управления, при помощи которых можно легко выполнить ряд задач, которые поставлены перед вами.
Прежде, чем приступить непосредственно к вызову диалогового окна, вы должны помнить о том, что диалоговые окна подразделяются на несколько видов, каждое из которых имеет свой способ открытия.
Во-первых, это окно печати. Его, чаще всего, вызывают благодаря функции печати нажатием в меню «Файл» кнопки «Печать». Окно печати также можно открыть и при помощи сочетания клавиш «Ctrl» и «Р». А если вы выберите в контекстном меню пункт «Печать», тем самым минуете диалоговое окно и приступите сразу к непосредственной печати нужного вам файла.
Во-вторых, это окно открытия файла или какого-нибудь документа. Его можно вызвать, если нажать клавишу под названием «Открыть». Данная кнопка всегда находится в панели инструментов программы, которую вы используете в своей работе. После этих действий перед вами откроется изображение папки, которая открыта. Кроме того, вы можете вызвать данное диалоговое окно, если будет использовать меню «Файл», а в нем пункт «Открыть». Подобное действие вы можете провести, если нажмете одновременно клавиши «Ctrl» и «О».
В-третьих, это диалоговое окно, которое отвечает за сохранение файла. Его вызывают только одним способом. В меню «Файл» вам необходимо выбрать пункт под названием «Сохранить как», а затем указать название и тип файла, а также место его размещения на жестком диске.
В-четвертых, это окно настройки ОС и различного оборудования. Чтобы вызывать его, вам следует вначале нажать «Пуск» на вашем рабочем столе, а затем пункт «Панель управления».
В-пятых, это окно сообщений, которое вызывается также при помощи нескольких способов. Вам необходимо нажать на значок, который отвечает за появление сообщений. Перед вами откроется окно с текстом внутри и предложением исполнить определенное действие в нескольких вариантах. Чаще всего такие окна выводятся автоматически, причем некоторые из них просят пользователя, только подтвердить, что данное сообщение им прочитано.
Диалоговое окно, которое отвечает за свойства папки, вызывается путем нажатия правой кнопки мыши по нужной вам папке.
Диалоговое окно "Стек вызовов" | Документы Microsoft
- 2 минуты на чтение
В этой статье
Отображает список текущих активных вызовов процедур в режиме паузы. При выполнении кода в процедуре эта процедура добавляется в список активных вызовов процедур. Каждый раз, когда процедура вызывает другую процедуру, она добавляется в список.Вызываемые процедуры удаляются из списка, когда выполнение возвращается к вызывающей процедуре. Процедуры, вызываемые из окна «Немедленное», также добавляются в список вызовов.
В следующей таблице описаны параметры диалогового окна.
Опция | Описание |
---|---|
Функция модуля проекта | Перечисляет процедуры. |
Показать | Перемещает точку вставки в место, где был сделан вызов, и включает индикатор стека вызовов. |
См. Также
Поддержка и отзывы
Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.
.android - вызов асинхронной задачи из диалогового окна
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- приложения Win32
- На чтение 24 минуты
В этой статье
В этом обзоре обсуждаются некоторые особенности программирования, касающиеся диалоговых окон.
Обзор включает следующие темы.
Процедуры диалогового окна
Процедура диалогового окна похожа на процедуру окна в том, что система отправляет сообщения процедуре, когда у нее есть информация, которую нужно предоставить, или задачи, которые необходимо выполнить.В отличие от оконной процедуры, процедура диалогового окна никогда не вызывает функцию DefWindowProc . Вместо этого он возвращает ИСТИНА, , если обрабатывает сообщение, или ЛОЖЬ, , если нет.
Каждая процедура диалогового окна имеет следующий вид:
BOOL CALLBACK DlgProc (HWND hwndDlg, сообщение UINT, WPARAM wParam, LPARAM lParam) { переключатель (сообщение) { // Поместите сюда случаи сообщений. дефолт: вернуть ЛОЖЬ; } }
Параметры процедуры служат той же цели, что и оконная процедура, с параметром hwndDlg , принимающим дескриптор окна диалогового окна.
Большинство процедур диалогового окна обрабатывают сообщения WM_INITDIALOG, и WM_COMMAND , отправленные элементами управления, но обрабатывают мало других сообщений, если вообще обрабатывают их. Если процедура диалогового окна не обрабатывает сообщение, она должна вернуть FALSE , чтобы дать системе команду обработать сообщения внутри. Единственным исключением из этого правила является сообщение WM_INITDIALOG . Процедура диалогового окна должна возвращать ИСТИНА , чтобы система указала на дальнейшую обработку сообщения WM_INITDIALOG .В любом случае процедура не должна вызывать DefWindowProc .
Сообщение WM_INITDIALOG
Система не отправляет сообщение WM_CREATE процедуре диалогового окна. Вместо этого он отправляет сообщение WM_INITDIALOG , когда он создает диалоговое окно и все его элементы управления, но перед отображением диалогового окна. Процедура должна выполнить любую инициализацию, необходимую для обеспечения отображения в диалоговом окне текущих параметров, связанных с задачей.Например, когда диалоговое окно содержит элемент управления для отображения текущего диска и каталога, процедура должна определить текущий диск и каталог и установить для элемента управления это значение.
Процедура может инициализировать элементы управления с помощью таких функций, как SetDlgItemText и CheckDlgButton . Поскольку элементы управления являются окнами, процедура также может управлять ими с помощью функций управления окнами, таких как EnableWindow и SetFocus . Процедура может получить дескриптор окна для элемента управления с помощью функции GetDlgItem .
Процедура диалогового окна может при необходимости изменять содержимое, состояние и положение любого элемента управления. Например, в диалоговом окне, которое содержит список имен файлов и кнопку Открыть , процедура может отключить кнопку Открыть , пока пользователь не выберет файл из списка. В этом примере шаблон диалогового окна определяет стиль WS_DISABLED для кнопки Открыть , и система автоматически отключает эту кнопку при ее создании. Когда процедура диалогового окна получает уведомление из окна списка, указывающее, что пользователь выбрал файл, процедура вызывает функцию EnableWindow , чтобы активировать кнопку Открыть .
Чтобы отобразить пользовательский значок в строке заголовка диалогового окна, обработчик WM_INITDIALOG может отправить в диалоговое окно сообщение WM_SETICON .
Если приложение создает диалоговое окно с помощью одной из функций DialogBoxParam , DialogBoxIndirectParam , CreateDialogParam или CreateDialogIndirectParam , параметр lParam для параметра WM_INITDIALOG , переданного функции, содержит дополнительное сообщение .Приложения обычно используют этот дополнительный параметр для передачи указателя на дополнительную информацию об инициализации процедуре диалогового окна, но процедура диалогового окна должна определять значение параметра. Если приложение использует другую функцию для создания диалогового окна, система устанавливает для параметра lParam значение NULL .
Перед возвратом из сообщения WM_INITDIALOG процедура должна определить, следует ли установить фокус ввода на указанный элемент управления.Если процедура диалогового окна возвращает ИСТИНА , система автоматически устанавливает фокус ввода на элемент управления, дескриптор окна которого находится в параметре wParam . Если элемент управления, получающий фокус по умолчанию, не подходит, он может установить фокус на соответствующий элемент управления с помощью функции SetFocus . Если процедура устанавливает фокус ввода, она должна вернуть FALSE , чтобы система не установила фокус по умолчанию. Элемент управления, получающий фокус ввода по умолчанию, всегда является первым элементом управления, указанным в шаблоне, который является видимым, не отключенным и имеет стиль WS_TABSTOP.Если такой элемент управления не существует, система устанавливает фокус ввода по умолчанию на первый элемент управления в шаблоне.
Сообщение WM_COMMAND
Элемент управления может отправить сообщение WM_COMMAND в процедуру диалогового окна, когда пользователь выполняет действие в элементе управления. Эти сообщения, называемые сообщениями уведомления, информируют процедуру ввода данных пользователем и позволяют ему выполнять соответствующие ответы.
Все предопределенные элементы управления, кроме статических элементов управления, отправляют уведомления для выбранных действий пользователя.Например, кнопка отправляет сообщение уведомления BN_CLICKED всякий раз, когда пользователь нажимает кнопку. Во всех случаях младшее слово параметра wParam содержит идентификатор управления, старшее слово wParam содержит код уведомления, а параметр lParam содержит дескриптор окна управления.
Процедура диалогового окна должна отслеживать и обрабатывать уведомления. В частности, процедура должна обрабатывать сообщения, имеющие идентификаторы IDOK или IDCANCEL; эти сообщения представляют собой просьбу пользователя закрыть диалоговое окно.Процедура должна закрыть диалоговое окно с помощью функции EndDialog для модальных диалоговых окон и функции DestroyWindow для немодальных диалоговых окон.
Система также отправляет сообщения WM_COMMAND процедуре диалогового окна, если диалоговое окно имеет меню, такое как меню окна , и пользователь щелкает элемент меню. В частности, система отправляет сообщение WM_COMMAND с параметром wParam , установленным на IDCANCEL , всякий раз, когда пользователь нажимает Закрыть в меню окна диалогового окна.Сообщение почти идентично сообщению уведомления, отправляемому кнопкой Отмена , и должно обрабатываться точно так же.
Сообщение WM_PARENTNOTIFY
Элемент управления отправляет сообщение WM_PARENTNOTIFY всякий раз, когда пользователь нажимает кнопку мыши, указывая на элемент управления. Некоторые приложения интерпретируют это сообщение как сигнал для выполнения действия, связанного с элементом управления, например отображения строки текста, описывающей назначение элемента управления.
Система также отправляет сообщения WM_PARENTNOTIFY при создании и уничтожении окна, но не для элементов управления, созданных из шаблона диалогового окна. Система предотвращает появление этих сообщений, задавая стиль WS_EX_NOPARENTNOTIFY при создании элементов управления. Приложение не может переопределить это поведение по умолчанию, если оно не создает собственные элементы управления для диалогового окна.
Сообщения Control-Color
Элементы управления и система могут отправлять сообщения с указанием цвета элемента управления, когда они хотят, чтобы процедура диалогового окна закрасила фон элемента управления или другого окна с помощью определенной кисти и цветов.Это может быть полезно, когда приложения переопределяют цвета по умолчанию, используемые в диалоговых окнах и их элементах управления. Ниже приведены сообщения контрольного цвета, которые заменили сообщение WM_CTLCOLOR .
Элемент управления отправляет сообщение о цвете элемента управления процедуре диалогового окна непосредственно перед тем, как нарисовать свой собственный фон. Сообщение позволяет процедуре указать, какую кисть использовать, а также установить цвета фона и переднего плана. Процедура указывает кисть, возвращая ручку кисти.Чтобы установить цвета фона и переднего плана, процедура использует функции SetBkColor и SetTextColor с контекстом устройства отображения элемента управления. Сообщение контрольного цвета передает дескриптор контекста устройства отображения процедуре в параметре wParam сообщения.
Система отправляет сообщение WM_CTLCOLORDLG в процедуру диалогового окна, если процедура не обрабатывает сообщение WM_ERASEBKGND . Предопределенный класс диалогового окна не имеет кисти фона класса, поэтому это сообщение позволяет процедуре определять свой собственный фон без необходимости включать код для выполнения работы.
В любом случае, когда процедура диалогового окна не обрабатывает сообщение о цвете элемента управления, система использует кисть с цветом окна по умолчанию, чтобы закрасить фон для всех элементов управления и окон, кроме полос прокрутки. Приложение может получить цвет окна по умолчанию, передав значение COLOR_WINDOW функции GetSysColor . Пока фон закрашен, цвет переднего плана для контекста устройства отображения устанавливается на цвет текста по умолчанию ( COLOR_WINDOWTEXT ).Для полос прокрутки система использует кисть, имеющую цвет полосы прокрутки по умолчанию ( COLOR_SCROLLBAR ). В этом случае цвета фона и переднего плана для контекста устройства отображения устанавливаются на белый и черный соответственно.
Диалоговое окно Обработка сообщений по умолчанию
Оконная процедура для предопределенного класса диалогового окна выполняет обработку по умолчанию для всех сообщений, которые процедура диалогового окна не обрабатывает. Когда процедура диалогового окна возвращает FALSE для любого сообщения, предопределенная оконная процедура проверяет сообщения и выполняет следующие действия по умолчанию:
Сообщение | Действие по умолчанию |
---|---|
DM_GETDEFID | Вы можете отправить это сообщение в диалоговое окно.Диалоговое окно возвращает управляющий идентификатор кнопки по умолчанию, если в диалоговом окне она есть; в противном случае возвращается ноль. |
DM_REPOSITION | Вы можете отправить это сообщение в диалоговое окно верхнего уровня. Диалоговое окно меняет свое положение, чтобы оно умещалось в области рабочего стола. |
DM_SETDEFID | Вы можете отправить это сообщение в диалоговое окно. В диалоговом окне в качестве кнопки по умолчанию устанавливается элемент управления, указанный идентификатором элемента управления в параметре wParam . |
WM_ACTIVATE | Восстанавливает фокус ввода для элемента управления, идентифицированного ранее сохраненным дескриптором, если диалоговое окно активировано. В противном случае процедура сохраняет дескриптор элемента управления, имеющего фокус ввода. |
WM_CHARTOITEM | Возвращает ноль. |
WM_CLOSE | Отправляет сообщение уведомления BN_CLICKED в диалоговое окно, указывая IDCANCEL в качестве управляющего идентификатора.Если диалоговое окно имеет идентификатор элемента управления IDCANCEL, а элемент управления в настоящее время отключен, процедура выдает предупреждение и не отправляет сообщение. |
WM_COMPAREITEM | Возвращает ноль. |
WM_ERASEBKGND | Заполняет клиентскую область диалогового окна, используя кисть, возвращенную из сообщения WM_CTLCOLORDLG , или цвет окна по умолчанию. |
WM_GETFONT | Возвращает дескриптор шрифта диалогового окна, определенного приложением. |
WM_INITDIALOG | Возвращает ноль. |
WM_LBUTTONDOWN | Посылает сообщение CB_SHOWDROPDOWN в поле со списком, имеющее фокус ввода, предписывая элементу управления скрыть свой раскрывающийся список. Процедура вызывает DefWindowProc для выполнения действия по умолчанию. |
WM_NCDESTROY | Освобождает глобальную память, выделенную для элементов управления редактированием в диалоговом окне (применяется к диалоговым окнам, которые задают стиль DS_LOCALEDIT ), и освобождает любой определяемый приложением шрифт (применяется к диалоговым окнам, которые задают стиль DS_SETFONT или DS_SHELLFONT ).Процедура вызывает функцию DefWindowProc , чтобы выполнить действие по умолчанию. |
WM_NCLBUTTONDOWN | Посылает сообщение CB_SHOWDROPDOWN в поле со списком, имеющее фокус ввода, предписывая элементу управления скрыть свой раскрывающийся список. Процедура вызывает DefWindowProc для выполнения действия по умолчанию. |
WM_NEXTDLGCTL | Устанавливает фокус ввода на следующий или предыдущий элемент управления в диалоговом окне, на элемент управления, идентифицированный дескриптором в параметре wParam , или на первый элемент управления в диалоговом окне, который является видимым, не отключенным и имеет WS_TABSTOP стиль.Процедура игнорирует это сообщение, если текущее окно с фокусом ввода не является элементом управления. |
WM_SETFOCUS | Устанавливает фокус ввода на элемент управления, идентифицированный ранее сохраненным дескриптором окна управления. Если такой дескриптор не существует, процедура устанавливает фокус ввода на первый элемент управления в шаблоне диалогового окна, который является видимым, не отключенным и имеет стиль WS_TABSTOP . Если такой элемент управления не существует, процедура устанавливает фокус ввода на первый элемент управления в шаблоне. |
WM_SHOWWINDOW | Сохраняет дескриптор элемента управления, имеющего фокус ввода, если диалоговое окно скрыто, затем вызывает DefWindowProc для выполнения действия по умолчанию. |
WM_SYSCOMMAND | Сохраняет дескриптор элемента управления, имеющего фокус ввода, если диалоговое окно сворачивается, затем вызывает DefWindowProc для завершения действия по умолчанию. |
WM_VKEYTOITEM | Возвращает ноль. |
Предопределенная оконная процедура передает все другие сообщения в DefWindowProc для обработки по умолчанию.
Интерфейс клавиатуры диалогового окна
Система предоставляет специальный интерфейс клавиатуры для диалоговых окон, который выполняет специальную обработку для нескольких клавиш. Интерфейс генерирует сообщения, соответствующие определенным кнопкам в диалоговом окне, или изменяет фокус ввода с одного элемента управления на другой. Ниже приведены ключи, используемые в этом интерфейсе, и их соответствующие действия.
Ключ | Действие |
---|---|
ALT + мнемоника | Перемещает фокус ввода на первый элемент управления (имеющий стиль WS_TABSTOP ) после статического элемента управления, содержащего указанную мнемонику. |
ВНИЗ | Перемещает фокус ввода на следующий элемент управления в группе. |
ВВЕДИТЕ | Посылает сообщение WM_COMMAND в процедуру диалогового окна.Параметр wParam установлен на IDOK или управляющий идентификатор кнопки по умолчанию. |
ESC | Посылает сообщение WM_COMMAND в процедуру диалогового окна. Параметр wParam установлен на IDCANCEL. |
ЛЕВЫЙ | Перемещает фокус ввода на предыдущий элемент управления в группе. |
мнемоника | Перемещает фокус ввода на первый элемент управления (имеющий стиль WS_TABSTOP ) после статического элемента управления, содержащего указанную мнемонику. |
ПРАВЫЙ | Перемещает фокус ввода на следующий элемент управления в группе. |
SHIFT + TAB | Перемещает фокус ввода на предыдущий элемент управления со стилем WS_TABSTOP . |
ВКЛАДКА | Перемещает фокус ввода на следующий элемент управления со стилем WS_TABSTOP . |
УП | Перемещает фокус ввода на предыдущий элемент управления в группе. |
Система автоматически предоставляет интерфейс клавиатуры для всех модальных диалоговых окон.Он не предоставляет интерфейс для немодальных диалоговых окон, если приложение не вызывает функцию IsDialogMessage для фильтрации сообщений в своем основном цикле сообщений. Это означает, что приложение должно передать сообщение IsDialogMessage сразу после извлечения сообщения из очереди сообщений. Функция обрабатывает сообщения, если они предназначены для диалогового окна, и возвращает ненулевое значение, чтобы указать, что сообщение было обработано и не должно передаваться в функцию TranslateMessage или DispatchMessage .
Поскольку интерфейс клавиатуры диалогового окна использует клавиши направления для перемещения между элементами управления в диалоговом окне, приложение не может использовать эти клавиши для прокрутки содержимого любого модального диалогового окна или любого немодального диалогового окна, для которого вызывается IsDialogMessage . Если в диалоговом окне есть полосы прокрутки, приложение должно предоставить альтернативный интерфейс клавиатуры для полос прокрутки. Обратите внимание, что интерфейс мыши для прокрутки доступен, если в систему входит мышь.
Стиль WS_TABSTOP
Стиль WS_TABSTOP определяет элементы управления, к которым пользователь может перейти, нажимая клавишу TAB или клавиши SHIFT + TAB.
Когда пользователь нажимает TAB или SHIFT + TAB, система сначала определяет, обрабатываются ли эти клавиши элементом управления, у которого в данный момент находится фокус ввода. Он отправляет элементу управления сообщение WM_GETDLGCODE , и если элемент управления возвращает DLGC_WANTTAB, система передает ключи элементу управления. В противном случае система использует функцию GetNextDlgTabItem , чтобы найти следующий видимый, не отключенный элемент управления, имеющий стиль WS_TABSTOP . Поиск начинается с элемента управления, в настоящее время имеющего фокус ввода, и продолжается в том порядке, в котором элементы управления были созданы, то есть в порядке, в котором они определены в шаблоне диалогового окна.Когда система находит элемент управления с требуемыми характеристиками, система перемещает фокус ввода на него.
Если при поиске следующего элемента управления со стилем WS_TABSTOP встречается окно со стилем WS_EX_CONTROLPARENT , система рекурсивно выполняет поиск дочерних окон.
Приложение также может использовать GetNextDlgTabItem для поиска элементов управления, имеющих стиль WS_TABSTOP . Функция извлекает дескриптор окна следующего или предыдущего элемента управления, имеющего стиль WS_TABSTOP , без перемещения фокуса ввода.
Стиль WS_GROUP
По умолчанию система перемещает фокус ввода на следующий или предыдущий элемент управления всякий раз, когда пользователь нажимает клавишу направления. Пока текущий элемент управления с фокусом ввода не обрабатывает эти клавиши, а следующий или предыдущий элемент управления не является статическим элементом управления, система продолжает перемещать фокус ввода через все элементы управления в диалоговом окне, когда пользователь продолжает нажимать направление ключи.
Приложение может использовать стиль WS_GROUP для изменения этого поведения по умолчанию.Стиль отмечает начало группы элементов управления. Если элемент управления в группе имеет фокус ввода, когда пользователь начинает нажимать клавиши направления, фокус остается в группе. Как правило, первый элемент управления в группе должен иметь стиль WS_GROUP , а все остальные элементы управления в группе не должны иметь этого стиля. Все элементы управления в группе должны быть смежными, то есть они должны создаваться последовательно, без каких-либо промежуточных элементов управления.
Когда пользователь нажимает клавишу направления, система сначала определяет, обрабатывает ли текущий элемент управления, имеющий фокус ввода, клавиши направления.Система отправляет сообщение WM_GETDLGCODE элементу управления, и если элемент управления возвращает значение DLGC_WANTARROWS , передает ключ элементу управления. В противном случае система использует функцию GetNextDlgGroupItem для определения следующего элемента управления в группе.
GetNextDlgGroupItem выполняет поиск элементов управления в том порядке (или в обратном порядке), в котором они были созданы. Если пользователь нажимает клавишу RIGHT или DOWN, GetNextDlgGroupItem возвращает следующий элемент управления, если этот элемент управления не имеет стиля WS_GROUP .В противном случае функция меняет порядок поиска и возвращает первый элемент управления со стилем WS_GROUP . Если пользователь нажимает клавишу LEFT или UP, функция возвращает предыдущий элемент управления, если текущий элемент управления уже не имеет стиля WS_GROUP . Если текущий элемент управления имеет этот стиль, функция меняет порядок поиска, находит первый элемент управления со стилем WS_GROUP и возвращает элемент управления, который непосредственно предшествует обнаруженному элементу.
Если при поиске следующего элемента управления в группе встречается окно со стилем WS_EX_CONTROLPARENT , система рекурсивно ищет дочерние элементы окна.
После того, как система получит следующий или предыдущий элемент управления, она отправляет элементу управления сообщение WM_GETDLGCODE для определения типа элемента управления. Затем система перемещает фокус ввода для управления, если это не статический элемент управления. Если управление является автоматическим переключателем, система отправляет ему сообщение BM_CLICK .Приложение также может использовать GetNextDlgGroupItem для поиска элементов управления в группе.
Как правило, первый элемент управления в группе объединяет стили WS_GROUP и WS_TABSTOP , чтобы пользователь мог переходить из группы в группу с помощью клавиши TAB. Если группа содержит переключатели, приложение должно применить стиль WS_TABSTOP только к первому элементу управления в группе. Система автоматически перемещает стиль, когда пользователь перемещается между элементами управления в группе.Это гарантирует, что фокус ввода всегда будет находиться на самом последнем выбранном элементе управления, когда пользователь переходит в группу с помощью клавиши TAB.
Мнемоника
Мнемоника - это выбранная буква или цифра в метке кнопки или в тексте статического элемента управления. Система перемещает фокус ввода на элемент управления, связанный с мнемоникой, всякий раз, когда пользователь либо нажимает клавишу, соответствующую мнемонике, либо нажимает эту клавишу и клавишу ALT в комбинации. Мнемоника предоставляет пользователю быстрый способ перейти к указанному элементу управления с помощью клавиатуры.
Приложение создает мнемонику для элемента управления, вставляя амперсанд (&) непосредственно перед выбранной буквой или цифрой в метке или тексте для элемента управления. В большинстве случаев строка с завершающим нулем, предоставляемая с элементом управления в шаблоне диалогового окна, содержит амперсанд. Однако приложение может создать мнемонику в любое время, заменив существующую метку или текст элемента управления с помощью функции SetDlgItemText . Для каждого элемента управления можно указать только одну мнемонику.Хотя это рекомендуется, мнемоника в диалоговом окне не обязательно должна быть уникальной.
Когда пользователь нажимает буквенную или цифровую клавишу, система сначала определяет, обрабатывает ли текущий элемент управления с фокусом ввода клавишу. Система отправляет сообщение WM_GETDLGCODE элементу управления, и если элемент управления возвращает значение DLGC_WANTALLKEYS или DLG_WANTMESSAGE , система передает ключ элементу управления. В противном случае он ищет элемент управления, мнемоника которого соответствует указанной букве или цифре.Он продолжает поиск, пока не найдет элемент управления или не проверит все элементы управления. Во время поиска он пропускает любые статические элементы управления, которые имеют стиль SS_NOPREFIX .
Если при поиске элемента управления с соответствующей мнемоникой встречается окно со стилем WS_EX_CONTROLPARENT , система рекурсивно выполняет поиск дочерних окон.
Если система обнаруживает статический элемент управления и этот элемент управления не отключен, система перемещает фокус ввода на первый элемент управления после статического элемента управления, который является видимым, не отключенным и имеет стиль WS_TABSTOP .Если система находит какой-либо другой элемент управления, имеющий соответствующую мнемонику, она перемещает фокус ввода на этот элемент управления. Если элемент управления является кнопкой по умолчанию, система отправляет сообщение уведомления BN_CLICKED процедуре диалогового окна. Если элемент управления представляет собой кнопку другого стиля и в диалоговом окне нет другого элемента управления с такой же мнемоникой, система отправляет элементу управления сообщение BM_CLICK .
Параметры диалогового окна
Параметры диалогового окна - это текущий выбор и значения для элементов управления в диалоговом окне.Процедура диалогового окна отвечает за инициализацию этих параметров при создании диалогового окна. Он также отвечает за получение текущих настроек из элементов управления перед разрушением диалогового окна. Методы, используемые для инициализации и получения настроек, зависят от типа элемента управления.
Дополнительные сведения см. В следующих разделах:
Радиокнопки и флажки
В диалоговых окнах используются переключатели и флажки, позволяющие пользователю выбирать из списка параметров.Радиокнопки позволяют пользователю выбирать из взаимоисключающих опций; флажки позволяют пользователю выбрать комбинацию параметров.
Процедура диалогового окна может установить начальное состояние флажка с помощью функции CheckDlgButton , которая устанавливает или снимает флажок. Для переключателей в группе взаимоисключающих переключателей процедура диалогового окна может использовать функцию CheckRadioButton , чтобы установить соответствующий переключатель и автоматически очистить любой другой переключатель.
Перед тем, как диалоговое окно завершится, процедура диалогового окна может проверить состояние каждого переключателя и флажка с помощью функции IsDlgButtonChecked , которая возвращает текущее состояние кнопки. Диалоговое окно обычно сохраняет эту информацию для инициализации кнопок при следующем создании диалогового окна.
Элементы управления редактированием диалогового окна
Во многих диалоговых окнах есть элементы управления для редактирования, которые позволяют пользователю вводить текст в качестве ввода. Большинство процедур диалогового окна инициализируют элемент управления редактированием при первом запуске диалогового окна.Например, процедура диалогового окна может помещать предлагаемое имя файла в элемент управления, который пользователь затем может выбрать, изменить или заменить. Процедура диалогового окна может установить текст в элементе управления для редактирования с помощью функции SetDlgItemText , которая копирует текст из указанного буфера в элемент управления для редактирования. Когда элемент управления редактированием получает фокус ввода, он автоматически выбирает весь текст для редактирования.
Поскольку элементы управления редактированием не возвращают свой текст в диалоговое окно автоматически, процедура диалогового окна должна получить текст до своего завершения.Он может получить текст с помощью функции GetDlgItemText , которая копирует текст элемента управления редактированием в буфер. Процедура диалогового окна обычно сохраняет этот текст для инициализации элемента управления редактированием позже или передает его родительскому окну для обработки.
В некоторых диалоговых окнах используются элементы управления, позволяющие пользователю вводить числа. Процедура диалогового окна может получить число из элемента управления редактированием с помощью функции GetDlgItemInt , которая извлекает текст из элемента управления редактирования и преобразует текст в десятичное значение.Пользователь вводит число в виде десятичных цифр. Он может быть подписанным или неподписанным. Процедура диалогового окна может отображать целое число с помощью функции SetDlgItemInt . SetDlgItemInt преобразует целое число со знаком или без знака в строку десятичных цифр.
Окна списка, поля со списком и списки каталогов
В некоторых диалоговых окнах отображаются списки имен, из которых пользователь может выбрать одно или несколько имен. Например, для отображения списка имён файлов в диалоговом окне обычно используется список и функции DlgDirList и DlgDirSelectEx .Функция DlgDirList автоматически заполняет поле списка именами файлов в текущем каталоге. Функция DlgDirSelect извлекает выбранное имя файла из списка. Вместе эти две функции обеспечивают удобный способ отображения в диалоговом окне списка каталогов, чтобы пользователь мог выбрать файл, не вводя его имя и местоположение.
В диалоговом окне также можно использовать поле со списком для отображения списка имен файлов. Функция DlgDirListComboBox автоматически заполняет часть списка поля со списком именами файлов в текущем каталоге.Функция DlgDirSelectComboBoxEx извлекает выбранное имя файла из части списка.
Управляющие сообщения диалогового окна
Многие элементы управления распознают предопределенные сообщения, которые при получении элементами управления заставляют их выполнять определенные действия. Например, сообщение BM_SETCHECK устанавливает флажок в поле, а сообщение EM_GETSEL извлекает часть текста элемента управления, которая выбрана в данный момент. Управляющие сообщения предоставляют диалоговой процедуре более широкий и более гибкий доступ к элементам управления, чем стандартные функции, поэтому они часто используются, когда диалоговое окно требует сложного взаимодействия с пользователем.
Процедура диалогового окна может отправить сообщение элементу управления, предоставив идентификатор элемента управления и используя функцию SendDlgItemMessage , которая идентична функции SendMessage , за исключением того, что она использует идентификатор элемента управления вместо дескриптора окна для идентификации элемент управления, который должен получить сообщение. Указанное сообщение может требовать, чтобы диалоговая процедура отправляла параметры вместе с сообщением, и сообщение может иметь соответствующие возвращаемые значения. Работа и требования каждого управляющего сообщения зависят от цели сообщения и элемента управления, который его обрабатывает.
Дополнительные сведения об управляющих сообщениях см. В разделе «Элементы управления Windows».
Пользовательские диалоговые окна
Приложение может создавать настраиваемые диалоговые окна, используя определяемый приложением класс окна для диалоговых окон вместо использования предопределенного класса диалогового окна. Приложения обычно используют этот метод, когда диалоговое окно является их главным окном, но он также полезен для создания модальных и немодальных диалоговых окон для приложений, которые имеют стандартные перекрывающиеся окна.
Определяемый приложением класс окна позволяет приложению определять оконную процедуру для диалогового окна и обрабатывать сообщения перед их отправкой в процедуру диалогового окна.Он также позволяет приложению определять значок класса, фоновую кисть класса и меню класса для диалогового окна. Приложение должно зарегистрировать класс окна перед попыткой создания диалогового окна и должно предоставить шаблон диалогового окна с атомным значением или именем класса окна.
Многие приложения создают новый класс диалогового окна, сначала извлекая информацию о классе для предопределенного класса диалогового окна и передавая ее в функцию GetClassInfo , которая заполняет структуру WNDCLASS информацией.Приложение изменяет отдельные элементы структуры, такие как имя класса, кисть и значок, а затем регистрирует новый класс с помощью функции RegisterClass . Если приложение заполняет структуру WNDCLASS самостоятельно, оно должно установить член cbWndExtra равным DLGWINDOWEXTRA , что является количеством дополнительных байтов, необходимых системе для каждого диалогового окна. Если приложение также использует дополнительные байты для каждого диалогового окна, они должны превышать дополнительные байты, требуемые системой.
Оконная процедура для настраиваемого диалогового окна имеет те же параметры и требования, что и любая другая оконная процедура. Однако, в отличие от других оконных процедур, оконная процедура для этого диалогового окна должна вызывать функцию DefDlgProc вместо функции DefWindowProc для любых сообщений, которые она не обрабатывает. DefDlgProc выполняет ту же обработку сообщений по умолчанию, что и оконная процедура для предопределенного диалогового окна, которая включает в себя вызов процедуры диалогового окна.
Приложение также может создавать настраиваемые диалоговые окна, создавая подклассы оконной процедуры предварительно определенного диалогового окна. Функция SetWindowLong позволяет приложению определять оконную процедуру для указанного окна. Приложение может также попытаться создать подкласс с помощью функции SetClassLong , но это повлияет на все диалоговые окна в системе, а не только на те, которые принадлежат приложению.
Приложения, которые создают настраиваемые диалоговые окна, иногда предоставляют альтернативный интерфейс клавиатуры для диалоговых окон.Для немодальных диалоговых окон это может означать, что приложение не вызывает функцию IsDialogMessage , а вместо этого обрабатывает весь ввод с клавиатуры в пользовательской оконной процедуре. В таких случаях приложение может использовать сообщение WM_NEXTDLGCTL , чтобы минимизировать код, необходимый для перемещения фокуса ввода с одного элемента управления на другой. Это сообщение, при передаче в DefDlgProc , перемещает фокус ввода на указанный элемент управления и обновляет внешний вид элементов управления, например перемещение границы кнопки по умолчанию или установка автоматического переключателя.
.javascript - диалоговое окно jquery ui для подтверждения
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- О компании