Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Модальні та не модальні діалоги




Блоки діалогу

Блоки діалогу (dialog boxes) – спеціальні вікна, що забезпечують користувача гнучкими засобами взаємодії з програмним забезпеченням. Вони, як правило включають дочірні вікна, що є елементами керування (розглядалися раніше) через які користувач налаштовує програму та водить дані для обробки. Вони є однією з основних та традиційних частин інтерфейсу користувача в Windows.

Відповідно до поведінки, розрізняють два типи діалогів – модальний (modal) та немодальний (modeless). Різниця між ними полягає в способі керування потоками повідомлень.

Модальні блок діалогу блокують всі інші вікна програми доки дане вікно діалогу не буде закрито. Тобто, вони блокують потоки повідомлень від миші та клавіатури, що йдуть до батьківських вікон та вікон того ж рівня (sibling), що робить їх недоступними в межах одної програми. Можна створити системне модальне вікно, що заблокує всі програми в системі доки не буде закрито.

Немодальні діалоги більше подібні на звичайні вікна, вони дають користувачу можливість паралельно працювати і з іншими вікнами програми. Вони не блокують потоків повідомлень, що йдуть в довільну частину програми.

Більшість блоків діалогу є модальними, це пов’язано з тим, що спосіб їх поведінка (блокування всіх інших вікон) якнайкраще концентрує увагу користувача при введенні даних.

Блоки діалогів, модальні та немодальні, як і деякі інші вікна, можуть створюватися вдома способами:

- за шаблоном з ресурсів;

- за шаблоном створеним в пам’яті.

Найбільш розповсюдженим є спосіб створення діалогів (модальних та немодальних) на основі шаблону в ресурсах. Цей спосіб передбачає створення заготовки діалогу (шаблону) за допомогою середовища візуального програмування та розміщення цього шаблону в спеціальному форматі у файлі ресурсів програми (resource.rc). При необхідності шаблон діалогу можна створити відредагувавши ресурси текстовим редактором (файл ресурсів має текстову структуру), але такий спосіб не практикується. В ресурсах шаблони ідентифікуються унікальним цілим числом без знаку або символьним рядком з унікальною назвою елементу керування. Цей ідентифікатор є одним з параметрів для створення діалогу за шаблоном з ресурсів. Розглянемо способи створення модальних та немодальних діалогів.

Створення та робота з модальними діалогами. Об’єкт модального діалогу за шаблоном з ресурсів створюється шляхом виклику необхідного конструктора, що проводить початкову ініціалізацію змінних класу та зв’язує об’єкт з шаблоном.

 

CDialog::CDialog(LPCTSTR lpszTemplateName, CWnd * pParentWnd = NULL);

CDialog::CDialog(UINT nIDTemplate, CWnd * pParentWnd = NULL);

 

де lpszTemplateName та nIDTemplate – відповідно символьний рядок та число, що ідентифікують діалог в ресурсах; pParentWnd – вказівник на батьківське вікно, якщо він нульовий, то батьківським є основне вікно програми.

При створенні діалогу на основі шаблону в пам’яті спочатку необхідно створити порожній об’єкт діалогу викликавши конструктор за замовчуванням. Потім заповнити спеціальну структуру типу DLGTEMPLATE в якій, подібно до шаблону в ресурсах, описується вид на наповнення діалогу елементами керування. На закінчення викликається функція

 

BOOL CDialog::InitModalIndirect(LPCDLGTEMPLATE lpDialogTemplate,

CWnd * pParentWnd = NULL);

 

для ініціалізації діалогу.

Діалог створений за першим або другим способом буде невидимим. Для його активізації необхідно викликати метод

 

virtual int CDialog::DoModal();

 

який активізує і відобразить діалог (модальний). Ця функція захопить та буде утримувати керування доти, доки діалог не буде закритий. Вона повертає ціле число, через яке можна визначити код завершення діалогу. Наприклад, була натиснута кнопка „Так” чи „Ні”.

Створення та робота з немодальними діалогами. При створенні немодальних діалогів в обох випадках спочатку створюється об’єкт з викликом конструктора за замовчування. Потім для діалогу, що створюється за шаблоном з ресурсів, викликається один з методів

 

CDialog::Create(LPCTSTR lpszTemplateName, CWnd * pParentWnd = NULL);

CDialog::Create(UINT nIDTemplate, CWnd * pParentWnd = NULL);

 

Процес створення немодального діалогу на основі шаблону з пам’яті майже нічим не відрізняється від аналогічного для модального діалогу, окрім методу який його завершує

 

BOOL CDialog::CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate,

CWnd * pParentWnd = NULL);

 

На відміну від модального діалогу – немодальний за замовчуванням створюється невидимим. Для його візуалізації та заковування необхідно явно викликати метод ShowWindow().

Ще одна функціональна відмінність між модальним та немодальним діалогами. Метод DoModal(), створює та знищує об’єкт вікна при кожному своєму запуску. Для немодального діалогу об’єкт вікна, після виклику методу Create(), існує завжди. Для його знищення необхідно явно викликати метод DestroyWindow().

Для обміну даними з діалоговими вікнами існують різні механізми, які стандартно реалізовані в бібліотеці, і на жаль розглянути їх в короткому курсі не має можливості.




Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 1018; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.