Разное

C модальное окно: Модальные и немодальные диалоговые окна

25.06.2023

Модальное окно

Этот компонент позволяет открывать модальное окно при выполнении определенного действия. Например, когда пользователь нажимает на элемент на форме, странице или портлете.

начало внимание

Работа с этим компонентом доступна только во втором рантайме. Подробнее об этом режиме читайте в Базе знаний.

конец внимание

Внутри модального окна можно размещать другие компоненты (колонки, панели, вкладки и т. д.) и свойства.

Окно включает в себя две области:

  • область для основного контента;
  • подвал, на котором можно разместить кнопки.

Его можно добавлять внутрь компонентов.

Для модального окна можно задать настройки.

Окно настроек состоит из вкладок Основные, Дополнительные, События, Системные и Отображение.

Вкладка «Основные»

На этой вкладке можно задать основные настройки компонента.

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

Важно: если вы не укажете условия отображения и скрытия, окно в интерфейсе будет отображаться по умолчанию.

Только на чтение — определение, может ли пользователь редактировать данные в этом окне. Возможны следующие варианты:

— пользователь не может редактировать поля. Он сможет только просматривать введенные ранее данные.

— возможность редактировать поля будет наследоваться от настроек родительской формы, страницы, портлета или компонента.

Если флажок не установлен, пользователь может заполнять поля в этом окне.

Тип загрузки — способ загрузки модального окна на форме, странице, портлете или в компоненте:

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

Заголовок — название появившегося окна, которое пользователь видит в интерфейсе.

Размер компонента — ширина окна в интерфейсе: Маленький, Средний, Большой, На весь экран.

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

Действие при закрытии — возможность задать действие, которое выполнится, когда пользователь закроет окно.

Вкладки «Дополнительные», «События», «Системные» и «Отображение»

Настройки на вкладках Дополнительные, События, Системные и Отображение аналогичны настройкам компонента Колонка. Подробнее о них читайте в статье «Колонка».

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

Чтобы применить настройки, сохраните форму или сохраните и опубликуйте страницу, портлет или пользовательский компонент при помощи кнопки .

slide-out-panel.html tooltip.html

Нашли опечатку? Выделите текст, нажмите ctrl + enter и оповестите нас

Модальные окна | Disnake Guide

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

В этом разделе подробно рассказывается об использовании модальных окон с другими интерактивными компонентами и реагировании на взаимодействие с ними.

Предпросмотр модального окна​

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

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


Disnake BotBot05/16/2023

Создание тега

Название

Это название тега.

Описание

Это описание тега. Здесь может быть до 4000 символов.

Это было сделано с помощью следующего кода.

modals.py

import disnake
from disnake.ext import commands
from disnake import TextInputStyle

# Наследуем модальное окно
class MyModal(disnake.ui.Modal):
def __init__(self):
# Детали модального окна и его компонентов
components = [
disnake.ui.TextInput(
label="Name",
placeholder="Foo Tag",
custom_id="название",
style=TextInputStyle.short,
max_length=50,
),
disnake.ui.TextInput(
label="Description",
placeholder="Lorem ipsum dolor sit amet.",
custom_id="описание",
style=TextInputStyle.paragraph,
),
]
super().__init__(
title="Create Tag",
custom_id="create_tag",
components=components,
)

# Обработка ответа, после отправки модального окна

async def callback(self, inter: disnake.ModalInteraction):
embed = disnake.Embed(title="Создание тега")
for key, value in inter.text_values.items():
embed.add_field(
name=key. capitalize(),
value=value[:1024],
inline=False,
)
await inter.response.send_message(embed=embed)

bot = commands.Bot(command_prefix="!")

@bot.slash_command()
async def tags(inter: disnake.AppCmdInter):
"""Отправляет модальное окно для создания тега"""
await inter.response.send_modal(modal=MyModal())

bot.run("YOUR_BOT_TOKEN")

Реализацию этой команды с использованием интерфейса более низкого уровня можно найти здесь.

Создание модального окна​

Модальное окно может быть создано и отправлено двумя разными методами, как и другие компоненты сообщений:

  • Наследование класса от disnake.ui.Modal для определения компонентов и отправка его через параметр modal в interaction.send_modal (как это сделано в примере выше).
  • Определение атрибутов и компонентов модального окна внутри interaction.send_modal. Это считается реализацией модальных окон «более низкого уровня» — мы будем использовать тот же термин для обозначения этого в этой разделе.

Объект disnake.ui.Modal имеет следующие атрибуты:

  • title — Заголовок модального окна.
  • custom_id — ID, указанный для модального окна. К нему можно получить доступ через ModalInteraction.
  • timeout — Время (в секундах), по истечению которого модальное окно будет удалено из кэша. По умолчанию — 600 секунд.
  • components — Список компонентов, которые будут отображаться в модальном окне. Максимум 5 компонентов.

Помните

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

Эти атрибуты можно использовать при создании модального окна следующим образом.

modals.py

# Наследуем модальное окно.
class MyModal(disnake.ui.Modal):
def __init__(self):
super(). __init__(
title="Modal Title",
custom_id="modal_id",
timeout=300,
components=[...],
)

# Используем низко уровневый интерфейс. (внутри функции)
await inter.response.send_modal(
title="Modal Title",
custom_id="modal_id",
components=[...],

)

Примечание

Рекомендуется псевдослучайно присвоить модальному окну custom_id, сохранив в нем ID взаимодействия. Причина в том, что пользователь может закрыть модальное окно, не вызывая события, и снова открыть его с помощью той же команды. В таких случаях wait_for для старого модального по-прежнему будет активным, что возобновит выполнение обеих команд.

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

modals.py

- custom_id="create_tag_low",
+ custom_id=f"create_tag_low-{inter.id}",

% в wait_for
- check=lambda i: i.custom_id == "create_tag_low" and i.author.id == inter.author.id,
+ check=lambda i: i. custom_id == f"create_tag_low-{inter.id}",

Компоненты текстового ввода (

TextInput)​

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

  • label — Название поля текстового ввода.
  • custom_id — ID поля текстового ввода.
  • style — Использует один из стилей TextInputStyle для компонента. По умолчанию short.
  • placeholder — Заполнитель, который отображается, если ничего не введено.
  • value — Предварительно заполненное значение для ввода текста (максимальная длина — max_length).
  • required — Обязательно ли заполнение текста. По умолчанию — True.
  • min_length и max_length — Устанавливают минимальную и максимальную длину ввода соответственно.

Эти атрибуты можно использовать для каждого компонента TextInput следующим образом.

textinput.py

disnake.ui.TextInput(
label="Name",
placeholder="Foo Tag",
custom_id="name",
style=TextInputStyle.short,
max_length=50,
)

TextInputStyle имеет 2 стиля, которые имеют множество синонимов:

  • short — Представляет однострочный компонент ввода. Также называется single_line.
  • long — Представляет многострочный компонент ввода. Также называется multi_line или paragraph.

Методы получения ответа модальных окон​

callback()

Он ссылается на ответ, связанный с модальными окнами и возвращает объект ModalInteraction, содержащий значения, введённые пользователем. Он наследуется, позволяя разработчику определять действие, выполняемое с полученным ответом из модального окна.

modals.py

class MyModal(disnake.ui.Modal):
def __init__(self):
super().__init__(...)

async def callback(self, inter: disnake.ModalInteraction):
await inter.response.send_message("Пользовательский ввод получен!")

Если вы используете интерфейс низкого уровня для отправки модальных окон, вам придется использовать событие/прослушиватель для проверки ID пользователя и ответа на взаимодействие. Для этой цели существует событие on_modal_submit.

modals.py

@bot.slash_command()
async def tags(inter: disnake.ApplicationCommandInteraction):
...
await inter.response.send_modal(..., custom_id="modal_custom_id")

...

@bot.event()
async def on_modal_submit(inter: disnake.ModalInteraction):

if inter.custom_id == "modal_custom_id":
await do_stuff_here()

В качетсве альтернативы можно использовать bot.wait_for() для этой цели внутри команды.

modals.py

@bot.slash_command()
async def tags(inter: disnake. ApplicationCommandInteraction):
...
await inter.response.send_modal(..., custom_id="modal_custom_id")

modal_inter: disnake.ModalInteraction = await bot.wait_for(
"modal_submit",
check=lambda i: i.custom_id == "modal_custom_id" and i.author.id == inter.author.id,
timeout=300,
)

on_error()

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

modals.py

class MyModal(disnake.ui.Modal):
def __init__(self):
super().__init__(...)

async def on_error(self, error: Exception, inter: disnake.ModalInteraction):
await inter.response.send_message(f"Произошла ошибка!\n```{error}```")

on_timeout()

Вызывается, когда пользователь не отвечает до указанного таймаута; объект модального окна удаляется из кэша без выполнения взаимодействия.

Примечание

Ни один объект взаимодействия не передается методу on_timeout(). Он должен использоваться исключительно для внутренних функций.

Примечания​

  • Компонет TextInput — единственный компонент, который может использоваться в модальных окнах. Кнопки и меню выбора не могут использоваться внутри модального окна.
  • Вы можете добавлять компоненты в объект disnake.ui.Modal, используя метод append_component(). Чтобы напрямую добавлять компоненты текстового ввода, используйте add_text_input().
  • Если стиль компонента текстового ввода не указан, используется short.
  • По умолчанию все компоненты TextInput обязательны к заполнению.

Лимиты​

Существует несколько ограничений, о которых следует помнить при использовании модальных окон из-за ограничений API. Вот краткий список ограничений:

  • Модальное окно может иметь до 5 компонентов.
  • title модального окна имеет максимальную длину в 45 символов.
  • label текстового поля имеет максимальную длину в 45 символов.
  • placeholder текстового поля ограничен 100 символами.
  • custom_id модального окна и текстового поля ограничен 100 символами.
  • Заранее заполненное value текстового поля имеет максимальную длину 4000 символов (может быть изменено разработчиком).
  • Минимальное и максимальное значения для текстового поля могут быть установлены в диапазоне 0-4000 символов и 1-4000 символов соответственно.

Получившийся код​

Код, представленный на этой странице, можно найти в нашем репозитории GitHub здесь.

Информация и пример проекта по модальному/немодальному диалоговому окну MFC и учебному пособию по общим элементам управления Windows с использованием Visual C++-Module 5 0009

Примеры программ, скомпилированные с помощью компилятора Visual C++ 6. 0 (MFC 6.0) на компьютере под управлением Windows XP Pro с пакетом обновления 2. Темы и подтемы этого руководства перечислены ниже:

 

 

Модальный диалог и Общие элементы управления Windows

 

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

 

Модальные и немодальные диалоги

 

CD-диалог базовый класс поддерживает как модальные, так и немодальные диалоги. С модальный диалог , такой как Диалоговое окно «Открыть файл» , пользователь не может работать в другом месте в том же приложении более корректно, в один и тот же поток пользовательского интерфейса, пока диалоговое окно не будет закрыто. С немодальный диалог , пользователь может работать в другом окне приложения, пока остается диалог на экране. Microsoft Word Найти диалоговое окно «Заменить » — хороший пример немодального диалогового окна; вы можете редактировать свой документ, пока диалоговое окно открыто. Ваш выбор модальный или немодальный диалог зависит от приложения. Модальные диалоги их гораздо проще программировать, что может повлиять на ваше решение.

 

Ресурсы и средства управления

 

Итак, теперь вы знаете, что диалог — это просто окно. Чем диалог отличается от CView окна вы уже видели? Во-первых, диалоговое окно почти всегда привязан к ресурсу Windows, который идентифицирует элементы диалога и определяет их расположение. Поскольку вы можете использовать редактор диалогов, который является одним из редакторов ресурсов для создания и редактирования диалогового ресурса, вы можете быстро и эффективно создавать диалоги в визуальной форме.

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

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

 

Программирование модального диалога

 

Модальные диалоги являются наиболее часто используемыми диалогами. Действие пользователя (например, выбор меню) вызывает диалоговое окно на экране, пользователь вводит данные в диалоговое окно, а затем пользователь закрывает диалоговое окно. Вот сводка шагов по добавлению модального диалога в существующий проект:

 

  1. Использование диалоговый редактор для создания диалогового ресурса, содержащего различные элементы управления. Редактор диалогов обновляет файл сценария ресурсов проекта (RC), чтобы включить ваш новый диалоговый ресурс, и он обновляет проект файл resource.h с соответствующим #определять константы.

  2. Используйте ClassWizard для создания класса диалога, производного от CD-диалог и прикрепляется к ресурсу, созданному на шаге 1. ClassWizard добавляет связанный код и заголовочный файл в проект Microsoft Visual C++.

 

Когда ClassWizard создает производный класс диалогового окна, он создает конструктор, который вызывает CD-диалог модальный конструктор, который принимает идентификатор ресурса в качестве параметра. Сгенерированный файл заголовка диалогового окна содержит константу IDD перечислителя класса, для которой задан идентификатор ресурса диалогового окна. В файле CPP реализация конструктора выглядит примерно так:

 

CMyDialog::CMyDialog(CWnd* pParent /*=НУЛЬ*/) : CDialog(CMyDialog::IDD, pParent)

{

// здесь код инициализации

}

 

Использование enum IDD отделяет файл CPP от идентификаторов ресурсов, определенных в файле resource. h проекта.

 

  1. Используйте ClassWizard для добавления элементов данных, функций обмена и функций проверки в класс диалогового окна.

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

  3. Напишите код для инициализации специального управления (в OnInitDialog()) и для обработчиков сообщений. Убедитесь, что CD-диалог виртуальная функция-член ВклОК() вызывается, когда пользователь закрывает диалоговое окно, если пользователь не отменяет диалоговое окно). ВклОК() вызывается по умолчанию.

  4. Написать код в вашем классе представления, чтобы активировать диалог. Этот код состоит из вызов конструктора вашего диалогового класса, за которым следует вызов DoModal() функция-член диалогового класса. DoModal() возвращается только тогда, когда пользователь выходит из диалогового окна.

 

Теперь мы перейдем к реальному примеру, шаг за шагом.

 

Пример проекта MYMFC7

 

Давайте не будем возиться со слабыми маленькими диалогами. Мы создадим диалоговое окно монстра, содержащее почти все виды элементов управления. Работа будет легкой, потому что диалоговый редактор Visual C++ поможет нам. готовый продукт показан на следующем рисунке.

 

Рисунок 1: Готовый диалог проекта MYMFC7.

 

Как видите, диалоговое окно поддерживает работу с персоналом. приложение. Такого рода бизнес-программы довольно скучны, поэтому задача заключается в том, чтобы произвести что-то, чего нельзя было бы сделать с 80-колонной перфорированной карты. Программа немного оживлена ​​за счет использования элементов управления полосой прокрутки. для « Лояльность » и « Надежность ». Вот классический пример прямого действия и визуального представления данных! Позже элементы управления ActiveX могут добавить больше интереса.

 

Создание диалогового ресурса

 

Вот шаги для создания диалогового ресурса:

 

Запустите AppWizard, чтобы создать проект под названием MYMFC7. Выберите Новый из В меню File Visual C++ выберите вкладку Projects и выберите MFC AppWizard (exe) . Примите все значения по умолчанию, кроме двух: выберите . Один документ и отменить выбор Печать и предварительный просмотр . Здесь показаны параметры и имена классов по умолчанию.

 

 

Рисунок 2: Резюме проекта MYMFC7.

 

Как обычно, AppWizard устанавливает новый проект в качестве текущего проекта.

 

Создайте новый диалоговый ресурс с идентификатором IDD_DIALOG1 (идентификатор по умолчанию). Выберите Ресурс из меню Visual C++ Insert . Появится диалоговое окно Вставить ресурс . Нажмите на Диалог , а затем щелкните Новый . Visual C++ создает новый диалоговый ресурс, как показано здесь.

 

 

Рисунок 3: Создание нового диалогового ресурса через меню Insert .

 

 

Рисунок 4: Вставка нового диалогового ресурса.

 

 

 

 

 

Рисунок 5: Редактор диалоговых ресурсов.

 

Редактор диалогов назначает ресурс ID IDD_DIALOG1 к новому диалогу. Обратите внимание, что редактор диалогового окна вставляет ОК и Кнопки Cancel для нового диалога.

 

Измените размер диалогового окна и назначьте Заголовок MyDialog. Увеличьте диалоговое окно примерно до 5 на 7 дюймов.

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

 

 

Рисунок 6: Свойства диалога.

 

Состояние Кнопка канцелярской кнопки в верхнем левом углу определяет, будет ли диалоговое окно Свойства диалога оставаться поверх других окон. Когда канцелярская кнопка «нажата», диалоговое окно остается поверх других окон.

 

 

Рис. 7. Кнопка-канцелярская кнопка, оставляющая диалоговое окно «Свойства» наверху.

 

Нажмите кнопку Toggle Grid (в диалоговом окне панель инструментов), чтобы показать сетку и помочь выровнять элементы управления.

 

 

Рис. 8. Диалоговая сетка, помогающая выравнивать элементы управления в диалоговом окне.

 

Рисунок 9: Диалоговое окно с сеткой.

 

Вы можете протестировать свой диалог на этапе проектирования, щелкнув переключатель Test на панели инструментов Dialog. 0047 .

 

 

Рис. 10: Переключатель диалогового окна Test , проверка вашего диалогового окна в процессе проектирования.

 

Аналогичные кнопки и другие утилиты также доступны через меню Layout .

 

 

Рис. 11. Доступ к диалоговым утилитам редактирования через меню «Макет».

 

Установите стиль диалога. Нажмите на Вкладка Styles в верхней части Dialog Properties , а затем задайте свойства стиля, как показано на следующем рисунке.

 

 

Рисунок 12: Установка стиля диалога.

 

Установите дополнительные стили диалога. Нажмите на Вкладка «Дополнительные стили » в верхней части Dialog Properties , а затем задайте свойства стиля, как показано здесь.

 

 

Рисунок 13: Настройка дополнительных стилей диалога.

 

Добавьте элементы управления диалога. Используйте палитру элементов управления для добавления каждого элемента управления. Если палитра элементов управления не отображается, щелкните правой кнопкой мыши любую панель инструментов и выберите Элементы управления из списка. Перетащите элементы управления из панели управления (показано ниже) в новое диалоговое окно, а затем расположите и измените размер элементов управления, как показано на рисунке 1. Вот элементы управления палитры элементов управления.

 

Рисунок 14: Доступные элементы управления из палитры элементов управления Visual C++.

 

В диалоговом редакторе отображается положение и размер каждого элемента управления в строке состояния. Позиционные единицы — это специальные «диалоговые единицы». или DLU s, а не единиц устройства. Горизонтальный DLU — это средняя ширина шрифта диалогового окна, деленная на 4. Вертикальный DLU — это средняя высота шрифта, деленная на 8. Шрифт диалогового окна обычно представляет собой MS Sans Serif размером 8 пунктов.

 

Вот краткое описание элементов управления диалогового окна, используйте перетаскивание для элементов управления:

 

  • Элемент управления статическим текстом для Name поле. Статический текстовый элемент управления просто рисует символы на экране. Нет взаимодействие с пользователем происходит во время выполнения. Вы можете ввести текст после того, как вы позиционируете ограничивающий прямоугольник, и вы можете изменить размер прямоугольника по мере необходимости. Этот это единственный статический текстовый элемент управления, который вы увидите в текстовом списке, но вы должны также создайте другие статические текстовые элементы управления, как показано ранее на рис. 6-1. Выполните ту же процедуру для других элементов управления статическим текстом в диалоговом окне. Все статические текстовые элементы управления имеют одинаковый идентификатор, но это не имеет значения, поскольку программе не требуется доступ ни к одному из них.

 

 

Рисунок 15: Настройка статический текст управление.

 

Ускоритель клавиатуры

 

Статический текстовый элемент управления (например, Имя или Навык ) имеет амперсанд ( и ) встроенный в текст для его подписи. Во время выполнения появится амперсанд в качестве подчеркивания под следующим символом. Этот ускоритель клавиатуры или клавиша быстрого доступа, позволяет пользователю переходить к выбранным элементам управления, удерживая нажатой Клавиша Alt (или Ctrl или Shift ) и нажав клавишу, соответствующую подчеркнутому символу. Связанный контроль должен следовать сразу за статическим текстом в порядке табуляции. Таким образом, Alt-N переходит к Управление редактированием имени и Альт-К переходит в поле со списком навыков. Излишне говорить, что назначенные символы перехода должны быть уникальными в диалоговом окне. Элемент управления Skill использует Alt-K, потому что элемент управления SSN использует . Alt-S . К сожалению, акселератор клавиатуры не работает в этом примере, потому что нам нужен дополнительный шаг для заставить его работать и будет отображаться в другом модуле. Дополнительным шагом является установка ключа через ресурс Accelerator, как показано ниже.

 

 

Рисунок 16: Назначение сочетания клавиш через ResourceView.

 

  • Элемент управления редактированием имени . редактировать элемент управления является основным средством ввода текста в диалог. Щелкните элемент управления правой кнопкой мыши и выберите Properties . Измените идентификатор этого элемента управления с IDC_EDIT1 к IDC_NAME. Примите значения по умолчанию для остальных свойств. Обратите внимание, что наборы по умолчанию Авто HScroll, это означает, что текст прокручивается горизонтально, когда поле заполнено.

  • SSN (номер социального страхования). Что касается диалога касается редактора, элемент управления SSN точно такой же, как и редактирование имени. контроль. Просто измените его идентификатор на IDC_SSN. Позже вы будете использовать ClassWizard, чтобы сделать это поле числовым.

 

Рисунок 17: Модификация SSN редактировать свойства управления.

 

Рисунок 18: Модификация Био (биография) редактировать свойства управления.

  • Категория групповой ящик. Этот элемент управления служит только для визуального группирования двух переключателей. Введите заголовок Категория . ID по умолчанию достаточно.

  • Почасовая и Зарплата Радио-кнопки. Расположите эти радиокнопки внутри Групповой ящик категории . Установите Почасовой идентификатор кнопки для IDC_CAT и установите другие свойства, как показано здесь.

Рисунок 19: Изменение свойств переключателя.

 

Рисунок 20: Изменение свойств второго переключателя.

 

Убедитесь, что обе кнопки имеют код . Свойство Auto (по умолчанию) на Стили набор вкладок и что только Почасовая кнопка имеет Набор свойств группы . Когда эти свойства настроены правильно, Windows гарантирует, что только одна из двух кнопок может быть выбрана вовремя. Групповой ящик категории на работу кнопок не влияет.

  • Страховка Групповой ящик. Этот элемент управления содержит три флажка. Введите заголовок Страховка .

  • Позже, когда вы установите порядок вкладок в диалоговом окне, вы убедитесь, что Поле группы Insurance следует за последним переключателем группы категории . Установить страховку свойство control Group теперь, чтобы «завершить» предыдущую группу. Если вы этого не сделаете, это не является серьезной проблемой, но вы получите несколько предупреждающих сообщений при запуске программы через отладчик.

 

 

Рисунок 21: Модификация Страхование свойств коробки группы.

  • Жизнь , Инвалидность , и Медицинские флажки. Поместите эти элементы управления в поле группы «Страхование». Примите свойства по умолчанию, но измените идентификаторы на IDC_LIFE, IDC_DIS, и IDC_MED. В отличие от переключателей, флажки независимы; пользователь может установить любую комбинацию.

 

 

Рисунок 22: Модификация Жизнь , Инвалидность и Медицинские свойства флажков .

  • Поле со списком навыков . Это первый из трех типов полей со списком. Измените идентификатор на IDC_SKILL, а затем нажмите на стилей вкладку и установите параметр Type до Простой . Нажмите на Вкладка Data и добавить три навыка (заканчивая каждую строку цифрой Ctrl-Ввод ) в Введите элементы списка коробка.

 

Рисунок 23: Модификация Свойства поля со списком Skill .

 

 

Рисунок 24: Добавление элемента списка.

 

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

  • Поле со списком Educ (образование). Измените идентификатор на IDC_EDUC; в противном случае примите значения по умолчанию. Добавьте три уровня образования в Страница Data , как показано на рис. 25. В раскрывающемся списке пользователь может ввести что угодно в поле редактирования, щелкнуть стрелку, а затем выбрать пункт из выпадающего списка или используйте До или Вниз клавиша направления, чтобы выбрать элемент из прикрепленного списка.

 

 

Рисунок 25: Модификация Поле со списком Educ (образование).

 

 

Продолжить в следующем модуле… часть 2

 

 

 

 

 

 

Дальнейшее чтение и копание:

  1. MSDN Электронная документация по библиотеке классов MFC 7.0.

  2. MSDN Электронная документация по библиотеке классов MFC 9.0 — последняя версия.

  3. Портирование и миграция ваших старых программ.

  4. Библиотека MSDN

  5. DCOM в MSDN.

  6. COM+ в MSDN.

  7. COM в MSDN.

  8. Тип данных Windows.

  9. Учебник по программированию Win32.

  10. Лучшее из C/C++, MFC, Windows и других связанных книг.

  11. Unicode и многобайтовый набор символов: История и примеры программ.

 

 


модальный и немодальный

  1. Начало работы с C или C++ | Учебник C | Учебник по С++ | Часто задаваемые вопросы по C и C++ | Получить компилятор | Исправления для распространенных проблем
  1. 02.12.2006 #1

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

    Я прочитал множество книг по Win32 API на эту тему, но ни в одной из них не упоминается ясно различия между модальными и немодальными диалоговыми окнами. они дают очень простые описания, такие как «немодальный диалог более независим, чем модальный» и «модальный диалог является наиболее распространенным», однако это ничего не говорит мне о реальной разнице.

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

    однако в этом выпуске я не вижу, как я смогу разместить функцию, такую ​​​​как TranslateAccelerator, в моем WinMain и передать диалоговому окну переведенные сообщения ускорителя, если у меня нет действительного дескриптора диалогового окна внутри из WinMain. замена DialogBox на CreateDialog решит эту проблему, но DialogBox создает модальное диалоговое окно, а CreateDialog создает немодальное диалоговое окно.

    может ли кто-нибудь помочь мне с этой модальной и немодальной вещью? также вы думаете, что я могу использовать DialogBox и по-прежнему обрабатывать такие вещи, как клавиши быстрого доступа, и если да, то как мне это сделать (будет ли это нормально без цикла сообщений, содержащего TranslateMessage?)?

    любая помощь здесь будет принята с благодарностью. заранее спасибо.

    Последний раз редактировалось Блич; 02. 12.2006 в 16:39.


    Intel Core 2 Quad Q6600 @ 2,40 ГГц
    3072 МБ PC2-5300 DDR2
    2 x 320 ГБ SATA (640 ГБ)
    NVIDIA GeForce 8400GS 256 МБ PCI-E


  2. 02.12.2006 #2

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

    Ввод кода в Code::Blocks 8.02, компиляция в MinGW 3.4.5.


  3. 02.12.2006 #3

    Оба они основаны на одном и том же системном классе окон (имя класса окна «#32770») с немного другим поведением, определяемым системой — немного похоже на кнопки и переключатели, которые оба являются проявлениями класса окна, определенного системой «кнопка», за исключением того, что различия между типами диалоговых окон не столь выражены ни визуально, ни, возможно, поведенчески.

    Модальное диалоговое окно (созданное с помощью DialogBox,DialogBoxParam) в основном привлекает внимание, пока не будет закрыто — оно предназначено для ситуаций, когда требуется ввод данных пользователем или его ответ/подтверждение, прежде чем продолжить; они не позволяют вам переключаться на другие окна в том же приложении (модальное приложение) или даже в другие приложения (системное модальное), пока модальное диалоговое окно не будет закрыто.

    Немодальный диалог подобен другому окну; вы можете переключаться между ним и другими окнами в том же приложении.

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

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

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


« Предыдущая тема | Следующая тема »

Популярные страницы

  • Как начать работу с C++ (или C) сегодня
  • C Учебное пособие
  • Учебник по C++
  • 5 способов научиться программировать быстрее
  • 5 самых распространенных проблем, с которыми сталкиваются начинающие программисты
  • Как настроить компилятор
  • 8 Распространенные ошибки программирования
  • Что такое С++ 11?
  • Создание игры от начала до конца

Последние добавления

  • Как создать общую библиотеку в Linux с помощью GCC — 30 декабря 2011 г.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *