Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_progr_Win / Lab9.doc
Скачиваний:
9
Добавлен:
23.03.2015
Размер:
1.11 Mб
Скачать

Лабораторна робота №9.

Тема роботи: Робота з діалогами.

Ціль роботи: Придбання досвіду створення прикладного програмного забезпечення для Windows з використанням діалогових вікон.

Теоретична частина

Діалогове вікно звичайне містить безліч елементів керування (вони є його дочірніми вікнами), через які проходить обмін даними між користувачем і додатком. Існує кілька функцій Win32, що допомагають у конструюванні, відображенні і керуванні вмістом діалогових вікон.

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

Вікна діалогу бувають модальними (modal) чи немодальними (modeless). Найчастіше зустрічаються модальні вікна діалогу. Якщо програма виводить на екран модальне вікно діалогу, то користувач програми не може переключатися між вікном діалогу й іншими вікнами програми. Користувач повинний спочатку закінчити роботу з вікном діалогу, це звичайно робиться шляхом щелчка на кнопці, позначеної або OK, або Cancel. Але, незважаючи на наявність на екрані вікна діалогу, користувач може переключатися на інші програми. Деякі вікна діалогу (називані системними модальними вікнами) цього робити не дозволяють. Системне модальне вікно діалогу змушує користувача, перед тим як він одержить можливість зробити що-небудь інше в Windows, завершити роботу з ним.

Для розташування елементів керування на поверхні діалогового вікна використовується три способи:

  • Перший спосіб припускає включення у файл ресурсів додатка текстового опису шаблона діалогового вікна. Цей опис можна створити за допомогою будь-якого текстового редактора.

  • Другий спосіб розміщення органів керування припускає використання спеціального редактора діалогів. Цей редактор дозволяє намалювати діалогове вікно і зберегти його текстовий опис у файлі ресурсів додатка. Такий підхід у створенні додатків носить зачатки візуального програмування, коли зовнішній вигляд і поводження додатка визначається за допомогою графічних засобів проектування без традиційного програмування на якій-небудь алгоритмічній мові.

  • Третій спосіб припускає створення шаблона діалогового вікна в пам'яті під час роботи додатка. Цей спосіб використовується рідко, звичайно тільки в тих випадках, коли зовнішній вигляд діалогового вікна не можна визначити на етапі створення додатка.

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

Для створення діалогового вікна не потрібно викликати функцію CreateWindow, тому що в програмному інтерфейсі Windows визначені функції, спеціально призначені для створення діалогових вікон. Перед викликом функцій, спеціально призначені для створення діалогових вікон, необхідно створити шаблон діалогового вікна. Це можна зробити, скориставшись одним з описаних вище способів. Крім шаблона, перед створенням діалогового вікна варто визначити спеціальну функцію діалогу, у которую будуть надходити повідомлення від елементів керування.

Отже, для створення діалогового вікна необхідно почати наступні дії:

  • Створити шаблон діалогу.

  • Визначити функцію діалогу.

  • Викликати одну з функцій створення діалогу.

Для прикладу створимо додаток, що використовує три діалогових вікна. У меню буде здійснюватися вибір одного з трьох діалогів: “About...”, “Text…”,“Integer…”... Текст, введений у діалозі пункту “Text…”,буде виводитися у визначеній позиції робочої області вікна. За значеннями заданим у діалозі пункту “Integer…”,буде малюватися прямокутник.

Зовнішній вигляд програми буде наступним:

Рисунок 2.15 Зовнішній вигляд програми ATIDIA.

Створення додатка, що використовує діалоги.

  1. Створіть новий проект ATIDIA (AboutTextIntegerDIAlogs).

  2. Тепер приступимо до створення діалогових вікон і меню, використовуваних у нашій програмі atidia.cpp. Для чого проробимо наступне: Project | Add To Project | New. На закладці Files вибираємо в списку Resource Script, задаємо назву файлу ресурсів — atidia і натискаємо ОК. Перейдіть у вікно Workspace, на вкладку ResourceView правою кнопкою миші кликніть на atidia resources і виберіть пункт Insert.

Рисунок 2.16 Додавання нового ресурсу до Resource Script.

У вікні, що з'явилося, Insert Resource виберіть Dialog і натисніть кнопку New.

  1. Починаємо редагувати вікно діалогу. Щоб поміняти заголовок вікна, двічі клацніть по ньому й у поле Caption уведіть новий заголовок. Щоб видалити деякий елемент, виділите його, кликнувши на ньому мишкою один раз, а потім натисніть клавішу Del. Коли одне діалогове вікно буде готово, збережете все, закрийте вікно редагування діалогу і перейдіть у вікно atidia.rc. Де за допомогою команди Insert створіть усі необхідні діалогові вікна.

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

Рисунок 2.17 Діалогове вікно About. У поле ID задайте: “ABOUTBOX”

Рисунок 2.18 Діалогове вікно Text Data Entry. У поле ID задайте: “TEXTBOX”

Рисунок 2.19 Діалогове вікно Numeric Data Entry. У поле ID задайте: “INTBOX”

Звернете особливу увагу, що при завданні ID діалогового вікна необхідно використовувати лапок, тому що це не числовий ідентифікатор, а назва.

Якщо двічі клацнути кнопкою миші на якому-небудь елементі, то можна задати його властивості і, зокрема, ID елемента. Поле ID являє собою число, за допомогою якого дочірнє вікно ідентифікує себе при посилці повідомлень (звичайно ці повідомлення WM_COMMAND) своєму батьківському вікну. Батьківським вікном цих дочірніх вікон елементів керування є саме вікно діалогу, що посилає ці повідомлення віконній процедурі, що знаходиться усередині Windows. Ця віконна процедура посилає ці повідомлення процедурі діалогового вікна, що включається у вашу програму. Значення ID аналогічні ідентифікаторам дочірніх вікон, що використовувалися у функції CreateWindow при створенні дочірніх вікон. ID кнопок варто залишити колишніми, а от ID полів введення і ID діалогових вікон варто задати так, як показано на малюнках.

  1. Далі необхідно створити меню програми. Снову перейдіть у вікно Workspace, правою кнопкою миші кликніть на atidia resource і виберіть пункт Insert. У вікні, що з'явилося, Insert Resource виберіть Menu і натисніть кнопку New. Назвіть пункт меню &Data-Input, а вміст цього вікна буде наступним: “About...” IDM_ABOUT, “Text...” IDM_TEXT, “Integer...” IDM_INTEGER, “Exit” IDM_EXIT. У якості ID задайте “ABOUTMENU” (як і у випадку діалогових вікон при завданні ID використовуйте лапки).

  2. Тепер, коли підготовка окінчена, можна переходити до написання програми. Для початку створіть файл atidia.cpp і скопіюйте в нього вміст файлу sample.cpp, що був створений у Лабораторній роботі №1.

  3. Крім заголовного файлу windows.h підключаємо тільки що створений редактором ресурсів заголовний файл resource.h:

#include <windows.h>

#include "resource.h"

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

  1. Функцію WinMain варто піддати наступним незначним змінам:

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

static char szAppName[] = "Dialogs" ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

HWND hWnd;

MSG msg ;

WNDCLASS wndclass ;

char szApplName[] = "ABOUTMENU" ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = szApplName;

wndclass.lpszClassName = szAppName ;

RegisterClass (&wndclass) ;

hWnd = CreateWindow (szAppName, "Entering Text and Numeric Data", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,hInstance, NULL) ;

  1. Функцію WndProc необхідно піддати більш ретельній обробці. Т.к. головне вікно програми містить меню, то в програмі потрібно обробляти повідомлення WM_COMMAND. Ідентифікатор дочірнього вікна елемента керування знаходиться в молодшому слові параметра wParam:

Соседние файлы в папке Lab_progr_Win