Проектування інтерфейсу програм у Windows.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Інформаційних систем та мереж (ІСМ)

Інформація про роботу

Рік:
2008
Тип роботи:
Курсова робота
Предмет:
Системне програмування та операційні системи
Група:
КН-29

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра “Інформаційні системи та мережі” К У Р С О В А Р О Б О Т А з дисципліни “Системне програмування та операційні системи” на тему: “Проектування інтерфейсу програм у Windows”  ЛЬВІВ 2008 Структура завдання на курсову роботу З А В Д А Н Н Я на курсову роботу з дисципліни "Системне програмування та операційні системи" студенту групи КН-29 Тема: “Проектування інтерфейсу програм у Windows” Завдання: Проектування інтерфейсу програм у Windows. ЗМІСТ ЗАВДАННЯ ТА КАЛЕНДАРНИЙ ПЛАН ЙОГО ВИКОНАННЯ 1. Провести огляд літературних джерел по заданій темі для аналізу задачі. 27.02  2. Розробити алгоритм розв'язування задачі. 27.03  3. Написати програму на мові С/C++, Assembler. Вимоги до програми: 1) програма повинна бути реалізована на мові С/С++, Assembler; 2) програма повинна мати інтерфейс для вибору режимів її роботи 3) програма повинна працювати у вікні MSDOS під керуванням операційної системи Windows; 4) програма повинна мати систему допомоги та інтерфейс у вигляді вікон та меню для вибору режимів роботи програми; 5) інші вимоги. 25.04  4. Підготувати вхідні дані для контрольного прикладу. 10.05   5. Реалізувати та відлагодити програму на вказаних мовах програмування.   6. Оформити записку до розрахункової роботи згідно вимог Міжнародних стандартів, дотримуючись такого змісту: • титульна сторінка • завдання для курсової роботи; • зміст; • вступ; • методи та засоби розв’язання задачі; • алгоритм розв'язування задачі; • опис програмної реалізації; • інструкція користувачеві; • контрольний приклад та аналіз результатів комп’ютерної реалізації програми; • висновки; • література; • додатки. 28.05   ЗАВДАННЯ ПРИЙНЯТО ДО ВИКОНАННЯ: ____________ Керівник роботи: ____________ /Кравець П.О./ З М І С Т Вступ……………………………………………………………………………………... 4 1. Формулювання задачі……………………………………...………………………... 5 2.Методи та засоби розв’язування задачі……………………………………………… 6 2.1. Клас вікон…………………………………......................................................6 2.2. Створення вікон………....................................................................................8 2.3 Головна функція додатка..……………..………………………………...……9 2.4 Полоса прокрутки……………….………….…..……………...………………9 2.5 Створення полоси прокрутки..………………………………………………10 2.6 Повідомлення від полоси прокрутки……………..…………………………10 2.7 Управління полосою прокрутки………………….…….....…………………11 2.8 Створення списку............................................................................................11 2.9 Вивід у вікно....................................................................................................12 2.10 Функції вивиду тексту..................................................................................12 2.11 Меню..............................................................................................................13 2.12 Створення меню............................................................................................14 2.13 Вставка елементів в меню............................................................................14 2.14 Видалення елементів з меню.......................................................................15 2.15 Акселератори.................................................................................................16 3. Алгоритм розв'язування задачі……………..…………………………...................... 17 4. Програма та її опис…………………………………………………………………… 19 4.1 Призначення програми……………………………………………………… 19 4.2. Мови програмування, на яких написана програма……………………….. 19 4.3. Програмні засоби, необхідні для реалізації програми……………………. 19 4.4. Технічні засоби, необхідні для реалізації програми………………... ……..19 5. Інструкція користувачеві……………………………………………………………. 21 6. Контрольний приклад та аналіз результатів комп'ютерної реалізації програми… 23 6.1 Меню файл відкрити...................………………………………………………23 6.2 Меню редагувати.................……………………………………………………23 6.3 Меню шрифт........................……………………………………………………24 6.4 Справка до програми.........................................................................................24 Висновки……………………………………………………………………………........ 25 Література……………………………………………………………………………...... 26 Додатки………………………………………………………………………………........27 В С Т У П Виконання даної курсової роботи є закріплення теоретичних знань та проктичних навичок програмування, набутих при вивченні дисципліни “Основи програмування”. В ході виконання курсової роботи студенти повинні навчитися самостійно працювати з літературою, розробляти алгоритми та програми на мові програмування Turbo С. Cі — універсальна, процедурна, імперативна мова програмування, розроблена у 1972 році Денісом Рітчі у Bell Telephone Laboratories для використання з операційною системою UNIX. З тих пір її версії з'явилися для багатьох інших операційних систем, і наразі Сі є однією з найбільш поширених мов програмування. Cі також здійснив великий вплив на інші мови програмування, особливо на C++, котра спочатку проектувалася, як розширення для Сі. Найчастіше використовується для написання системного програмного забезпечення, хоча, досить часто на ній пишуть і прикладне програмне забезпечення. С — мінімалістична мова програмування. Серед її головних цілей: можливість прямолінійної реалізації компіляції, використовуючи відносно простий компілятор, забезпечити низькорівневий доступ до оперативної пам'яті, формувати лише декілька інструкцій машинної мови для кожного елементу мови, і не вимагати обширної динамічної підтримки. У резальтаті, код С придатний для більшості системного програмного забезпечення, котре традиційно писалося на аcемблері. Незважаючи на її низькорівневі можливості, мова проектувалася для машинно-незалежного програмування. Сумісна зі стандартами та машинно-незалежно написана програма на С може легко компілюватися на великій кількості апаратних платформ та операційних систем з мінімальними змінами. Мова стала доступною для великої кількості платформ, від вбудованих мікроконтроллерів до суперкомп'ютерів. 1. Формулювання задачі Проектування інтерфейсу програм у Windows. 1) програма повинна бути реалізована на мові С/С++, Assembler; 2) програма повинна працювати під керуванням операційної системи Windows; 3) програма повинна мати інтерфейс у вигляді вікон та меню для вибору режимів роботи програми; 4) керування режимами роботи програми виконати за допомогою клавіатури та миші. 2. Методи та засоби розв’язання задачі Програми для Windows називають додатками. Користувач з додатком взаємодіє через вікна наступних видів: Вікно додатка. Воно організовує роботу, з'являється першим при запуску і закривається разом з припиненням роботи додатка. MDI-вікна. Вони служать для одночасної обробки декількох документів. Вікно допомоги. Воно більшою мірою працює під управлінням операційної системи, чим під управлінням додатка. Діалогове вікно. Воно забезпечує оперативний обмін даними між користувачем і додатком. Для розробника вікно є сукупністю великої кількості елементів, що функціонують під управлінням додатка і операційної системи. З погляду мови програмування, вікна - це об'єкти над якими виконують дії. Об'єкт належить опреділеному класу (типові), який описує безліч даних (параметрів стану вікна) і метод (функцію) зміни цих даних. Головне вікно на має подвійні рамки, що обрамували, заголовок, різні кнопки, смугу меню, панель інструментів з кнопками, смуги перегляду, рядок стану і ін. Ці елементи також є вікнами, мають свої дані і метод їх зміни, тобто належать до класів вікон. 2.1 Клас вікон Для створення вікна операційній системі вказують, до якого класу воно належить. Якщо до моменту створення вікна операційною системою відомий клас створюваного вікна (наприклад, це визначений в системі або зареєстрований поточним або іншим застосуванням клас), то можна скористатися ім'ям цього класу. Інакше потрібно створити новий клас (описати функцію вікна і набір використовуваних ресурсів) і зареєструвати його. Опис використовуваних класом вікон pесурсів Набір використовуваних ресурсів класу задають в структурі типа WNDCLASS. Ця структура описана таким чином: typedef struct { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hlnstance; HICON hlcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; } WNDCLASS; Наприклад, якщо описана структура цього типа: WNDCLASS wc; то привласнюють певні значення її полям. Призначення полів цієї структури: style набуває значень. Наприклад: wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; - lpfnWndProc вказує на функцію вікна. Вона розглядається нижче. - cbClsExtra дорівнює кількості додаткових байт класу. - cbWndExtra дорівнює кількості додаткових байт вікна цього класу. - hInstance вказує на дескриптор поточного застосування. - hIcon вказує на ймення піктограма (ікони), в яку перетворюється вікно при мінімізації. Ресурс ікони завантажують функцією LoadIcon: HICON Loadlcon( HINSTANCE hlnst, LPCTSTR lplconName); Параметр lplconName вказує на рядок з ім'ям завантажуваної ікони, а hInst - дескриптор додатка, чий виконуваний код містить завантажуваний ресурс. Для завантаження стандартної ікони hInst прирівнюють NULL, а як lplconName задають одне із значень. Наприклад, наступний оператор встановлює стандартну піктограму вікна додатка: wc.hlcon = Loadlcon( NULL, IDI_APPLICAT!ON ); В разі аварійного завершення функція повертає NULL і при згортанні вікон цього класу операційна система як іконки використовує логотип Windows. - hCursor задає вид курсора миші при його проходженні над вікном. Ресурс курсора завантажують функцією LoadCursor: HCURSOR LoadCursor( HINSTANCE hInst, LPCTSTR lpCursorName); Параметр lpCursorName вказує на рядок з ім'ям завантажуваного ресурсу, а hInst - дескриптор додатка, чий виконуваний код містить завантажуваний ресурс. Для завантаження стандартного курсора hInst прирівнюють NULL, а як lpCursorName задають одне із значень. Наприклад, наступного оператора задає курсор у вигляді стандартной стрілки: wc.hCursor = LoadCursor(NULL, IDC_ARROW); В разі аварійного завершення функція повертає NULL і вікно запозичуватиме курсор передування по руху миші вікна. Функції LoadIcon і LoadCursor завантажують ресурс іконки або курсора, тільки якщо ресурс не був завантажений; інакше вибирають дескриптор загруженного ресурсу. - hbrBackground задає дескриптор грона зафарбування фону вікна. В якості кисті можна використовувати "чисті" кольори або піктограму. Частіше використовують значення системного кольору. Кольори перетворять в типа HBRUSH. Наприклад, слідуючий оператор встановлює системний колір зафарбування фону: wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1); Система сама видаляє гроно фону при звільненні класу. Якщо вказати NULL, то додаток само повинен фарбувати фон вікон. Для оприділення необхідності зафарбування додаток обробляє повідомлення WM_ERASEBKGND або перевіряє поле fErase структури PAINTSTRUCT, заповненою функцією BeginPaint. - lpszMenuName вказує на ресурс головного меню вікон цього класа. Якщо задати NULL, вікна цього класу не мають заданого по умовчанню меню. Наприклад: wc.lpszMenuName = (LPCTSTR)NULL; - 1pszClassName вказує на текстовий рядок, що містить ім'я реєстрованого класу вікон, наприклад: wc.lpszClassName = szName; Для реєстрації класу вікон зручно використовувати функцію слідуючого вигляду: int RegClass( WNDPROC Proc, LPCTSTR szName){ WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.cbClsExtra = wc.cbWndExtra = 0; wc.lpfnWndProc = Proc; wc.hlnstance = hlnstance; wc.hlcon = Loadlcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = (LPCTSTR)NULL; wc.lpszClassName = szName; return RegisterClass(&wc); } Формальними параметрами цієї функції є покажчики на функцію вікна і рядок з ім'ям класу. Ім'я, список формальних параметрів і тип повернення функції можуть бути будь-якими іншими. Головне, щоб додатку після реєстрації були доступні ім'я зареєстрованого класу, а операційній системі - функція вікна цього класу. 2.2 Створення вікон Для створення вікна викликають функцію CreateWindow. Вона створює вікно, що перекривається, тимчасове або дочірнє, і встановлює початкове значення деяких його параметрів. Призначення аргументів виклику цієї функції: - lpClassName вказує на зареєстрований функцією RegisterClass або визначеного операційною системою класу. - dwStyle задає стиль вікна. Стиль вікон окремо розглянемо нижче. x — координата лівого краю вікна в пікселях. Для тимчасових вікон x відлічують від лівого краю екрану робочої зони батьківського вікна. Якщо для перекриваючого вікна із стилем WSJVISIBLE як x задати константу CW_USEDEFAULT, Windows встановлює не обов’язково нульову позицію за умовчанням для лівого верхнього кута вікна і ігнорує координату біля верхнього краю вікна. Для тимчасового дочірнього вікна така позиція за умовчанням рівна (0, 0). - nWidth - ширина вікна в пікселях. Для вікон можна, що перекриваються, задати рівною CW_USEDEFAULT. В цьому випадку система встановлює ненульові значення ширини і висоти за умовчанням і ігнорує задану висоту nHeight вікна. Ширина і висота тимчасового і дочірнього вікна за умовчанням дорівнюють нулю. - hWndParent може вказувати тільки на ініційоване вікно. Дескриптор вікна-батька обов'язково вказують при створенні дочірнього вікна. Дескриптор вікна-власника для тимчасового вікна вказувати необов'язково. - hMenu - дескриптор меню або ідентифікатор створюваного дочірнього вікна. Меню вікна, що перекривається або тимчасового, можна задати трьома способами: 1) у класі вікон вказують ім'я меню, і всі вікна цього класу можуть користуватися цим меню; 2) ім'я меню вказують як аргумент функції CreateWindow, і потрібне вікно користуватиметься цим меню, ігноруючи меню класу; 30 меню створюють в процесі або після створення вікна. У першому і третьому випадках аргумент hMenu рівний NULL. Якщо створюється дочірнє вікно, то аргументом hMenu задають Ідентифікатор цього вікна (цілочисельну константу). Перед створенням вікна функція CreateWindow посилає код повідомлення WM_CREATE функції створюваного вікна. Вона потім обробляє повернуте функцією вікна значення і створює вікно, якщо це значення дорівнює 0, або не створює вікна, якщо значення рівне -1. Відповідно функція CreateWindow повертає дескриптор створеного вікна або NULL. 2.3 Головна функція додатка Додатки завжди описують функцію з ім'ям WinMain. Вона отримує управління при запуску додатка, виконує властиві звичайним функціям дії, реєструє класи вікон, створює вікна, опитує чергу повідомлень і розподіляє свої повідомлення. Приклад опису функції WinMain: int WINAPI WinMain( HINSTANCE hlnstance HINSTANCE hPrevlnstance, LPSTR lpszCmdLine, int nCmdShow) { MSG msg; HWND hwnd; if (!RegClass(WndProc, szClassName)) return FALSE; hwnd = CreateWindow(szClassName, "Приклад Г WS_OVERLAPPEDWINDOW CW_USEDEFAULT, CW USEDEFAULT CW_USEDEFAULT, CW_USEDEFAULT 0, 0, hlnstance,NULL); if (!hwnd) return FALSE; ShowWindow( hwnd, SW_SHOWMAXIMIZED); UpdateWindow(hwnd); while (GetMessage(&msg, 0,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } Ім'я, тип повернення і список формальних параметрів функції опреділеними вимогами Windows API. Модифікатор WINAPI вказує на те, що функція при отриманні аргументів сама повинна виправити порядок розташування аргументів в стеку. Параметр hInstance від операційної системи отримує дескриптор поточного екземпляра додатка. Параметр hPrevlnstance в 16-разрядних застосуваннях вказує на активний попередній екземпляр додатка або NULL. У додатках Win32 він завжди рівний NULL і по ньому неможливо дізнатися про існування інших активних екземплярів цього застосування. Параметр lpszCmdLine вказує на рядок з аргументами командного рядка запуску додатка. При звичайному запуску цей параметр рівний NULL. Параметр nCmdShow передає додатку спосіб початкового відображення вікна. У тілі функції WinMain описані змінні msg і hwnd. Змінна msg призначена для тимчасового зберігання повідомлень при їх отриманні і розподілі. Змінна hwnd зберігає дескриптор створеного вікна. 2.4 Полоса прокрутки Полоса прокрутки широко використовують для проглядання вмісту документа, який не поміщається у вікні. Такі смуги бувають тільки горизонтальні або вертикальні. Вони розташовуються відповідно в нижній і правій частці вікна. Поняття смуга прокрутки не обмежується смугою перегляду. Воно в спільному випадку є безліччю вікон класу scrollbar різного призначення. Найбільш складний різновид вікон класу "scrollbar" представляють полоси перегляду. Смуга перегляду складається з декількох об'єктів, що мають різне призначення. Уявимо, що у вікні відображує якийсь документ. Якщо встановити курсор миші на верхню "кнопку з трикутником" смуги перегляду і натискувати ліву клавішу миші, документ у вікні зрушується вниз на один "рядок". Якщо ж аналогічним чином натискувати на нижню "кнопку з трикутником", документ зрушується на один "рядок" вгору. Повзунок при цьому стрибком зрушується відповідно на одну "позицію" вгору або вниз. Якщо встановити курсор миші в область смуги перегляду між повзунком і верхньою кнопкою і натискувати на ліву клавішу миші, документ зрушується вниз на одну "сторінку". Якщо клацнути лівою кнопкою миші в області між повзунком і нижньою кнопкою, документ зрушиться на одну "сторінку" вгору. Повзунок при цьому стрибком зміщується відповідно на одну "сторінку"вверх або вниз. Повзунок можна плавно переміщати мишею вздовж смуги прокрутки. В процесі переміщення вміст вікна переміщається або відображається у позиції повзунка. Таким чином, залежно від виду дії миші смуга прокрутки може давати 7 різних повідомлень батьківському вікну. Горизонтальна смуга перегляду складається з тих же об'єктів, що і вертикальна. Вона забезпечує згортку документа в горизонтальному напрямі. Існують і менш звичні види смуг прокрутки. Наприклад, це смуга прокрутки стилю SBS_SIZEBOX. 2.5 Створення смуги прокрутки Існує 3 способи створення смуги прокрутки 1. Смугу прокрутки можна створити за допомогою виклику функції CreateWindow. Цей спосіб аналогічний способу, використовуваному при створенні кнопок або статичних органів управління. Першим аргументом виклику функції CreateWindow вказують "scrollbar", а другим — NULL (заголовок вікна не використовується). Дескриптор смуги прокрутки використовують функції управління смугами прокрутки. Кількість і різновид смуг, що створюються в такий спосіб, нічим не обмежено. 2. При створенні будь-якого вікна за допомогою функції CreateWindow можна вказати, що вікно має горизонтальну, вертикальну або обидві полоси перегляду. Для того, щоб біля вікна з'явилися вертикальна чи горизонтальна смуги перегляду, при створенні вікна в третьому пара метрі функції CreateWindow вказують стиль WS_VSCROLL чи WS_HSCROLL. Наприклад: hwnd = CreateWindow(szClassName, szWindowTitle WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_,HSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hlnstance, NULL); 3. Деякі органи управління також можуть мати смуги перегляду. Примітка! У другому і третьому способах дескриптори для смуг перегляду не створюються. 2.6 Повідомлення від смуги прокрутки Горизонтальні смуги прокрутки функції батьківського вікна посилають повідомлення WM_HSCROLL, а вертикальні - повідомлення WM_VSCROLL. При цьому молодше слово параметра wParam містить код досконалої дії, старше слово - поточну позицію повзунка, а lParam вказує на дескриптор смуги прокрутки. Наступна таблиця перераховує імена код дій і пояснення до них: Код дії Пояснення дії  SB_ENDSCROLL Віджата клавіша миші (кінець роботи із смугою прокрутки)  SB__LINELEFT Зрушення вікна уздовж документа вліво (вгору) на одиницю  SB_LINERIGHT Зрушення вікна уздовж документа управо (вниз) на одиницю  SB_PAGELEFT Зрушення вікна уздовж документа вліво (вгору) на сторінку  SB_PAGERIGHT Зрушення вікна уздовж документа управо (вниз) на сторінку  SBTHUMBPOSITION Повзунок зупинився після плавного руху. Поточна позиція повзунка равна HIWORD(wParam)  SB_THUMBTRACK Повзунок плавно рухається. Поточна позиція повзунка рівна HIWORD(wParam)  SB_TOP Зрушення вліво (вгору) в початок документа  SB_BOTTOM Зрушення управо (вниз) в кінець документа   2.7 Управління смугою прокрутки Позиція nPos повзунка може набувати значень із заданого діапазона [nMin, nMax]. Найлівіша для горизонтальної смуги або сама верхня для вертикальної смуги позиції повзунка відповідають мінімальному значенню nMin. Відповідно в найправішому або самому нижньому положенні значення позиції рівне nMax. Функції управління станом смуг прокрутки не викликають для смуг, створених третім способом. Якщо смуга прокрутки створена першим способом, то при виклику цих функцій першим аргументом вказують дескриптор смуги. Інакше першим аргументом указують дескриптор вікна, якому належить смуга перегляду. Другими аргументом завжди указують вид смуги. Допустимі значення для другого аргументу перераховані в наступній таблиці: Значення Вид смуги  SB_CTL Смуга прокрутки. Першим аргументом є дескриптор смуги прокрутки  SB HORZ Стандартна горизонтальна смуга проглядання вікна  SB_VERT Стандартна вертикальна смуга проглядання вікна   Для встановки діапазону смуги прокрутки викликають функцію SetScroIlRange: BOOL SetScrollRange( HWND hwnd, int nBar, int nMin, int nMax, BOOL bRedraw); Вона встановлює мінімальне і максимальне значення позиції повзунка заданої смуги прокрутки. В разі успішної установки повернуте значення відмінне від нуля. При nMin=nMax смуга зникає. Такій ситуації потрібно уникати при управлінні станом смуг прокрутки. Аргумент bRedraw, якщо не дорівнює нулю, вказує на необхідність перемальовування смуги. 2.8 Створення списку Списки рядків створюють на базі класу "listbox". Рядки в списку нумерує операційна система, і номер першого рядка дорівнює 0. Списки можуть бути одноколоночні і багатоколоночні, з вертикальною (для одноколоночних списків) і горизонтальною (для багатоколоночних списков) смугою перегляду. При створенні списку першим аргументом функції CreateWindow є покажчик на рядок "listbox", а третій аргумент задають за допомогою таблиці. Наприклад: #define ID_LIST 111 hListBox = CreateWindow("listbox", NULL WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_WANTKEYBOARDINPUT 30, 30, 200,100, hwnd, (HMENU) ID_LIST, hlnst, NULL); Другий аргумент функції має бути вказаний як NULL. Додатково до стилів вікна WS_CHILD і WS_VISIBLE вказують стилі списка, імена яких мають префікс LBS_. 2.9 Вивід у вікно Вивід у вікна володіє лавою особливостей. Не можна користуватися функціями виведення бібліотеки компілятора, оскільки вони пристосовані для виводу в одне і єдине вікно. В операційній системі Windows додатка виводять одночасно в різні вікна. Система сама вирішує всі проблеми, пов'язані з можливим перекриттям або переміщенням цих вікон. З цим пов'язане те, що у вікно прагнуть виводити в одному місці додатки - при обробці повідомлення WM_PAINT. Додаток описують так, щоб під час вступу повідомлення WM_PAINT функція вікна могла перемальовувати все вікно або будь-яку його задану частину. Інтерфейс графічних пристроїв (Graphics Device Interface - GDI) системи відкриває доступ до великої кількості функцій вивода. Додатки, звертаючись до функцій GDI, працюють не з фізичними пристроями виводу, а з логічними. Тобто опис вибору функцій не залежить від фізичного способу відображення. GDI передає повідомлення про вивід драйверу пристрою виводу. Драйвер працює з фізичним пристроєм і при управлінні виведенням враховує його обмежені можливості і апаратні особливості. Завдяки цьому додатки здатні працювати з будь-яким пристроєм вивода, драйвер якого встановлений в системі. У цьому розділі розглядаються функції і параметри виводу у вікно на екрані відеомонітора. Но не всі фізичні пристрої виводу здатні підтримувати ті режими, в яких працює відеомонітор. Тому, описуючи послідовність операцій виводу, наприклад на принтер, слід враховувати можливості встановленого принтера. Параметри виводу встановлюють в контексті відображення з допомогою функцій GDI. Контекст відображення - це структура даних, яка містить характеристики пристрою виводу і покажчики на вибрані інструменти малювання. Функції GDI використовують тільки вибрані в контекст відображення параметри і інструменти малювання. Наприклад, для малювання лінії деякої товщини в контекст відображення застосування повинне вибрати перо цієї товщини. Дескриптор контексту відображення служить першим аргументом виклику всіх функцій, пов'язаних з виводом у вікно. 2.10 Функції виведення тексту Функція TextOut виводить символьний рядок у вказаній позиції, дотримуючи вибрані атрибути контексту відображення. Функція TextOut оголошена таким чином: BOOL TextOut( HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString ); Параметри цієї функції: nXStart задає логічну х-координату операції виводу. nYStart задає логічну у-координату операції виводу. lpString указує на рядок, який буде виведений. cbString дорівнює кількості символів в рядку, що виводиться. Функція TextOut заданий рядок виводить усередині уявного прямокутника, сформованого вічками символів строки, що виводиться. Координати nXStart і nYStart, залежно від режиму вирівнювання, визначають різні точки цього прямокутника. Функція SetTextAlign вибирає режим вирівнювання тексту в контекст відображення: UINT SetTextAlign( HDC hdc, UINT fMode); Параметр fMode задає режим вирівнювання і визначається при допомозі трьох груп. прапорів. Символічні імена прапорів починаються з префікса TA_. 2.11 М е н ю Меню використовують для вибору команд і зміни режимів роботи додатка. Рядки меню відображають назву розділу меню або сенс пов'язаної з рядком команди. Якщо рядок пов'язаний з командою, при її виборі додаток отримує повідомлення WM_COMMAND і ідентифікатор цієї команди. Основним елементом меню, що відображується, є рядок або графічний об'єкт. Тут розглядаються тільки рядки. Вони в текстовому вигляді відображують назви розділів або команд меню, а також клавіш швидкого доступу. Рядок може бути відмічена галочкою або іншим чином. Такий рядок використовується як прапорець або перемикач, що змінює режим роботи додатка. Якщо при виборі рядка на екрані повинна з'явитися діалогова панель, до слова справа додають багатокрапку. Заблоковані рядки меню відображують сірим кольором. Будь-яке вікно, що перекривається або тимчасове, може мати меню. Головне меню знаходиться нижчим за заголовок вікна, і його рядки розташовані в одну або декілька ліній. При виборі рядка головного меню, як правило, активізується розділ меню. Розділом меню є тимчасове меню. Рядки тимчасового меню розташовані в один або декілька стовбчиків. Якщо тимчасове меню може з'являтися в будь-якому місці робочої області, то воно називається плаваючим. В деяких випадках зручніше застосовувати плаваюче меню. Вони "спливають" після клацання зазвичай правої клавіші миші, і місце "спливання" неважко зв'язати з координатами курсору миші. Тоді легко вибрати потрібний рядок меню. Крім того, по координатах курсору миші можна визначити об'єкт, по зображення якого було зроблено клацання, і задати залежний від цього об'єкту набір рядків меню. Якщо вікно має системне меню, то воно розташоване зліва від тексту заголовка вікна. За способом створення розрізняють статичне і динамічне меню. Статичне меню створюють до запуску і не змінюють в процесі роботи додатка. Динамічне меню створюють в процесі роботи додатка. Динамічне меню після створення можна змінювати або залишити незмінним. Робота з рядками статичних і динамічних меню нічим не відрізняється. Тут розглядуються способи створення тільки динамічних меню. 2.12 Створення меню Алгоритм створення меню в спільному випадку містить наступні кроки: Створення порожнього меню hMenu. Вставка елементу в меню hMenu. Крок 2 повторюваний стільки раз, скільки елементів містить меню hMenu. Цей алгоритм дозволяє створювати багаторівневе меню. Наприклад, елемент, що вставляється на 2-му кроці, може вказувати на вже створене тимчасове меню. Причому будь-який елемент останнього також може вказувати на тимчасове меню. Меню спочатку створюють тільки в пам'яті. Існують функції, котрі операційній системі вказують, яке меню створене, якому вікну воно належить і коли його відображувати. Розгленемо ці функції. Функція CreateMenu створює порожнє головне меню вікна: HMENU CreateMenu(VOID); В разі успішного виконання функція CreateMenu повертає дескриптор створеного головного меню, інакше - NULL. Функція CreatePopupMenu створює порожнє тимчасове меню: HMENU CreatePopupMenu(VOID); В разі успішного виконання функція CreatePopupMenu повертає дескриптор створеного тимчасового меню, інакше - NULL. Функція SetMenu підключає головне меню hMenu до вікна hwnd: BOOL SetMenu(HWND hwnd, HMENU hMenu); Вона видаляє попереднє меню, але не руйнує його. Якщо ж hMenu= = NULL, то тільки віддаляється головне меню. В разі успішного підключення функція повертає ненульове значення. Після змін в меню, незалежно від стану вікна hwnd, для перемальовування смуги меню потрібно викликати функцію DrawMenuBar: void WINAPI DrawMenuBar(HWND hwnd); Вона перемальовувала смугу меню вікна hwnd. Таким чином, алгоритм підключення головного меню до вікна і відображення смуги меню містить наступні кроки: Створення головного меню. Цей крок повністю збігається з алгоритмом створення меню. Підключення головного меню до вікна. Перемальовування смуги меню вікна. Після цього роботу з меню забезпечує операційна система. Додаток в створене меню може вставляти нові елементи або видаляти старі, а також може змінювати або спитає поточне становище будь-якого елементу. 2.13 Вставка елементів в меню Функція InsertMenuItem вставляє елемент в меню hMenu: BOOL insertMenultem(HMENU hMenu, UINT ultem BOOL ffiyPosition, LPMENUITEMINFO lpmii); Значення аргументу uItem залежить від значення fflyPosition. При fByPosition=FALSE значення uItem дорівнює ідентифікатору команди елементу, що вставляється, інакше - позиції того елементу в меню, перед яким потрібно вставити новий елемент. Якщо меню містить n елементи і потрібно вставити новий елемент останнім, то номер позиції прирівнюють n (n=0, 1, 2 . ..). Параметр lpmii вказує на структуру типа MENUITEMINFO, яка вже містить інформацію про елемент, що вставляється. В разі успішної вставки елементу функція повертає ненульове значення. 2.14 Видалення елементів з меню Функція DeleteMenu видаляє елемент з меню і звільняє всі пов'язані з ним ресурси. Якщо елемент, що видаляється, указує на тимчасове меню, то функція DeleteMenu видаляє і це тимчасове меню. Прототип функції: BOOL DeleteMenu( HMENU hMenu, UINT uPosition, UINT uFlags); Параметри: hMenu - дескриптор змінного меню. uPosition визначає елемент, що видаляється. Його значення зв'язане з значенням параметра uFlags. uFIags задає спосіб тлумачення параметра uPosition. Якщо uflags=mf_bycommand (значення за умовчанням), то значення uPosition дорівнює ідентифікатору команди елементу, що видаляється. Якщо ж uFlags=MF_BYPOSITION, те значення uPosition рівне позиції удаленого елементу в меню. В разі успішного видалення функція повертає ненульове значення. Функція RemoveMenu видаляє елемент з меню, не руйнуючи зв’язані з ним ресурси. Ці ресурси можна використовувати надалі. Прототип функції: BOOL RemoveMenu( HMENU hMenu, UINT uPosition, UINT uFlags); Параметри функції RemoveMenu подібні до параметрів функції DeleteMenu. B випадку успішного видалення елементу RemoveMenu возвращает ненульове значення. Для руйнування меню викликають функцію DestroyMenu: BOOL DestroyMenu( HMENU hMenu); Ця функція руйнує задане меню і звільняє ресурси, які меню займає. Цю функцію вікна викликають для руйнування тих меню, які вони створили, але не підключили до себе. Підключені Меню автоматично руйнуються при руйнуванні вікна. В разі успішного руйнування функція повертає ненульове значення. Повідомлення WM_INITMENU Повідомлення WM_INITMENU поступає перед відображенням головного меню. Параметр wParam дорівнює дескриптору меню. Якщо повідомлення WM_INITMENU обробляють, то повертають 0. Обробка зазвичай зводиться до зміни стану елементів меню. Повідомлення WM_INITMENUPOPUP Це повідомлення поступає перед відображенням тимчасового меню. Параметр wParam дорівнює дескриптору меню. Молодше слово параметра lParam дорівнює позиції цього меню в меню верхнього рівня, старше слово lParam дорівнює 1 для системного меню і 0 - для звичайного. Якщо це повідомлення обробляють, то повертають 0. Обробка зазвичай зводиться до зміни стану елементів меню. Повідомлення WM_COMMAND Це повідомлення поступає після вибору рядка меню. Молодше слово параметра wParam дорівнює ідентифікатору вибраної команди, а старше слово дорівнює 0. Після обробки повідомлення повертають 0. Повідомлення WM_MENUSELECT Повідомлення WM_MENUSELECT поступає в процесі переміщення курсору меню по рядках меню. Молодше слово параметра wParam рівно ідентифікатору команди або позиції рядка (якщо при виборі рядка відображується тимчасове меню), а старше слово містить ті, флажки що складаються елементів меню з наступної таблиці: Значення Стан елементу  MF CHECKED Відмічений  MF DISABLED Заблокований  MF GRAYED Недоступний  MF HILITE Висвічений  MF MOUSESELECT Вибраний мишею  MF POPUP Відкриває тимчасове меню  MF_SYSMENU Належить системному меню вікна. Параметр LParam містить дескриптор цього меню   Якщо старше слово wParam містить 0xFFFF і lParam=NULL, то Windows закрив меню. Параметр lParam містить дескриптор меню, по якому переміщається курсор. Якщо це повідомлення обробляють, то повертають 0. 2.15 Акселератори Для швидкого доступу до команд використовують акселератори. Їх інколи називають "клавішами швидкого виклику" команд меню. Дійсно ж акселератори можуть бути пов'язані з будь-якими командами. Під час вступу повідомлення WM_COMMAND від акселератора молодше слово параметра wParam містить ідентифікатор зв'язаною з акселератором команди, а старше слово wParam дорівнює 1. Операційна система широко використовує акселератори. Наприклад, стандартне системне меню практично будь-якого вікна містить рядок "Закрить AIt+F4" і команда цього рядка пов'язана з акселератором Alt+F4. Тобто одночасне натиснення клавіш Alt і F4 рівноцінно вибору рядка "Закрить Alt+F4" системного меню активного вікна. Додаток всі використовувані акселератори повинно записати в одну таблицю і працювати з дескриптором цієї таблиці. Для роботи з таблицею існує декілька функцій. Функція CreateAcceleratorTable створює таблицю акселераторів: HACCEL CreateAcceleratorTabie( LPACCEL lpaccl, int cEntries ); Тут lpaccl - покажчик на масив структур типа ACCEL, який містить описи акселераторів, а cEntries - кількість структур в масиві lpaccl. B випадку успішного створення функція повертає дескриптор створеної таблиці, інакше - NULL. Кожну створену функцією CreateAcceleratorTable таблицю потрібно руйнувати до завершення роботи додатка. Для цього викликають функцію DestroyAcceleratorTable. 3. Алгоритм розв'язування задачі   4.Програма та її опис 4.1 Призначення програми Програма призначена для відкриття, редагування, створення текстових файлів. Програма демонстративно може використовуватись у школах, інститутах при вивченні даного матеріалу. Мови програмування, на яких написана програма Програма написана на мові програмування С. Вибір даної мови зумовлений завданням проекту. Мова C була створена на початку 70-х рр. Денісом Рітчі, який працював в компанії Bell Telephone Laboratories. C була розроблена як мова для програмування операційної системи Unix. З того часу мова пройшла великий шлях розвитку, і на сьогоднішній день існує понад 17 різних компіляторів мови C. В лютому 1987 р. фірма Borland International заявила про створення компілятора Turbo C, який став одним з найкращих компіляторів того часу. Програмні засоби, необхідні для реалізації програми Для нормальної роботи програми необхідні самі мінімальні потреби: кольоровий монітор з підтримкою текстового режиму, при збереженні результатів на диску повинне бути вільне місце і диск не повинен бути захищений від запису; маніпулятор типу „миша” та клавіатура – для управління програмою; процесор від 100 Hz; оперативна пам’ять – від 64 К. Технічні засоби, необхідні для реалізації програми Нормальну роботу програми забезпечує операційна система Windows. Перед запуском програми в оперативну пам’ять повинен бути завантажений драйвер маніпулятора „миші” (інакше управління програмою за допомогою цього пристрою буде неможливим). Програма написана з використанням засобів структурованого та модульного програмування. Структурованому програмуванню відповідає розбиття програми на функції, модульному – розподіл цих функцій за призначенням на окремі групи, які формують різні файли включення. Програма була розроблена в інтегрованому середовищі розробки програм Dev C/C++. Дане середовище забезпечує засоби відлагодження програми: покрокове виконання програми, перегляд та модифікація значень змінних програми під час її виконання:  Для успішного написання програми її відлагодження повинно відбуватися покроково. Тобто після того, як ми написали якусь частину програми (це може бути підпрограма) ми виконуємо компіляцію, знаходимо помилки і виправляємо їх. Ми повинні пам’ятати, що ті помилки, які показує компілятор, не завжди стосуються саме тих частин на які він вказує. Причина може виявитися у попередніх операторах. Також ми повинні пам’ятати, що компілятор не показує логічних помилок, які ми створюємо. Тому перед запуском програми необхідно перевірити нашу програму на наявність таких помилок. У таких випадках нам допомагає попередньо розроблений алгоритм розв’язування задачі. Програма відкомпільована у виконавчий exe-файл, який може завантажуватися і виконуватися під управлінням будь-якої операційної системи Windows. Запуск програми (готового exe-файлу) можна здійснювати з командного рядка, або будь-яким іншим способом (запуск з командного файлу, запуск програми у Windows’і і т.д.). Використовуючи інтегроване середовище Dev C/C++ також можна запустити програму. Для цього потрібно відкрити файл програми, який містить функцію main і виконати команду меню Run – Run. Програма буде наново відкомпільована, тому повинні бути наявні всі файли включення та бібліотеки. Для нормальної роботи програми на комп’ютері повинен бути певний носій інформації (логічний диск, або віртуальний диск в оперативній пам’яті, дискета або CD), в якій зберігатиметься програма. Управління програмою реалізоване за допомогою миші та клавіатури і відповідає програмному інтерфейсу. Для нормальної роботи миші перед запуском програми в оперативну пам’ять повинен бути завантажений драйвер миші. 5. Інструкція користувачеві Для запуску у користувача повинна бути операційна система Windows.. Після запуску програми перед користувачем появляється основне вікно програми. Розглянемо основні елементи вікна та методи управління ними. 5.1 Головне вікно програми  Управління меню програми здійснюється за допомогою маніпулятора типу „миша” або клавіатурою. Призначення пунктів меню програми: Файл – міститься інформація по створенню, відкриттю, збереженні та закриттю файлу.. Редагування – забезпечує редагування текстових файлів (вставити, вирізати, копіювати). Формат – дозволяє вибрати потрібний нам шрифт. Допомога - вивести інформацію про програму. Контрольний приклад та аналіз результатів комп'ютерної реалізації програми 6.1 Меню файл відкрити  6.2 Меню редагувати, вирізати 6.3 Меню вибору шрифта  6.4 Справка до програми  В И С Н О В О К У процесі виконання даної роботи було закріплено теоретичні знання по програмуванню інтерфейсу під Windows на мові С. У програмі виконується опрацювання масивів рядків символів, структур, динамічних списків та дерев; робота з екраном. Кінцев...
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!