ВСТУП
Для еффектівнойработисістеми та її большогопокупательского
попиту недостатньо тільки того, щоб апаратура та програми забезпечували
правильні результати - не менш важливим фактором є зручність
роботи користувача. Тому в даний час ні один програмний продукт, позбавлений
більш менш зручного інтерфейсу взаємодії користувача з комп'ютером
і програм між собою, не може розраховувати на успіх. У світі розроблена величезна
кількість різних систем підтримки створення призначеного для користувача інтерфейсу.
Найбільш прогресивним, на нашу думку, є обьектнооріетірованная
система Turbo Vision фірми Borland і операційне середовище Windows фірми Microsoft.
Розглядом можливостей системи Turbo Vision займалася в своїй роботі Фомичева
Т.Л., а в представленій роботі проводиться вивчення і огляд засобів, що входять
до складу операційного середовища Windows. Той хто написав хоча б одну комерційну
програму, то знає, скільки часу і сил витрачається на організацію меню і
вироблення єдиного, несуперечливого, інтуїтивно ясного і зручного для користувача
інтерфейсу. Інтерфейс, розроблений корпорацією Microsoft є одним
з кращих і став своєрідним еталоном для наслідування. У Microsoft Windows програмісту
доступна вся міць цього інтерфейсу - він позбувається необхідності
організовувати меню, роботу з клавіатурою і мишкою (достатньо скористатися стандартними
засобами). Інтерфейс з користувачем Windows є повним і цілісним.
У ньому вирішені не тільки проблеми організації меню, але і все спілкування з користувачем
організовано стандартними засобами. ІСТОРІЯ СТВОРЕННЯ MICROSOFT WINDOWS
Корпорація Microsoft оголосила про початок розробки графічної операційної
оболонки Windows 10 листопада 1983, хоча ще в кінці 1982 року програмісти
Microsoft почали створювати універсальний набір графічних процедур, названий
Графічний інтерфейс з Комп'ютером (CGI). Спочатку передбачалося, що
CGI як набір процедур буде поставлятися з компіляторами Microsoft, дозволяючи
розробникам програм виводити графіку на самі різні типи принтерів. Програмісти
могли б використовувати у своїх програмах функції CGI, які потім переводилися
б у команди потрібного типу принтера. Незабаром після початку робіт над CGI
корпорація Microsoft розгорнула роботи зі створення графічної операційної
середовища для комп'ютерів з MS-DOS. Створення такої оболонки було інспіровано несподіваним
інтересом користувачів IBM сумісних комп'ютерів до оголошення корпорацією
VISICorp про початок робіт над багатовіконний операціоннной оболонкою VisiOn.
Таким чином, стара добра конкуренція зробила свою справу - у лютому 1983 року
стало ясно, що Microsoft створить свою власну оболонку Windows. Хоча багато
особливості та властивості Windows кардинально змінилися в подальшому, деякі
положення були зрозумілі з самого початку. Windows повинна бути багатозадачною, тобто
повинна дозволяти запускати декілька програм одночасно. Windows повинна працювати
з усіма типами дисплеїв і принтерів. І оскільки користувачеві дуже важко
відмовитися від звичних програмних засобів, Windows повинна дозволяти запускати
програми MS-DOS. Остання мета виявилася настільки важкою у реалізації,
що затримала весь проект на багато місяців. Завдання виявилося не з простих. Типовою
машиною був комп'ютер з порівняно повільним процесором 8088 і оперативної
пам'яттю 64Kb. Якщо врахувати, що MS-DOS накладає принципове обмеження
за оперативною паміті в 640Kb і, на відміну від комп'ютерів Macintosh, не забезпечує
программноаппаратную підтримку графіки, розробка багатозадачного графічної
операційної оболонки загрожувала вирости в нездійсненне завдання. Однак Microsoft
розгорнула роботи над Windows повним ходом. До осені 1983 розробкою
Windows було зайнято вже 15 висококваліфікованих програмістів, залучених
до проекту з різних філій Microsoft. Багато фірм відрядили своїх
фахівців для одночасної участі в проекті. Коли роботи над CGI перейшли
у фазу тестування, це не був уже самостійний продукт. CGI був переменован
в GDI (the Graphics Device Interface - "Інтерфейс із графічними Пристроями")
і став частиною Windows, включивши в себе процедури роботи не тільки з принтером,
але і з дисплеєм. Для цього в CGI були додані функції, що забезпечують підтримку
друкарською-видавничих особливостей у роботі з текстами та процедури маніпулювання
графічними об'єктами. При презентації першого варіанту Windows
було обіцяно, що комерційна продаж почнеться в травні 1984. Весною 1984 року дата
початку продажів була відсунута на листопад. У листопаді ця дата була перенесена на
Червень 1985. Однак коробки з Windows з'явилися в магазинах тільки 18 листопада
1985 года.Несколько факторів призвели до стользначітельнимзадержкам. Однак
головну роль зіграло небажання Microsoftвиходіть на ринок з сирим продуктом. У лютому
1984 главакорпораціі Microsoft Білл Гейтс (Bill Gates) провів семінар, на
якому представив Software Development Kit (SDK), пакетдля написання
додатків під Windows, продемонструвавши на немвозможності, пропоновані програмісту
під Windows. SDK справив хороше враження і до червня 1984 було
продано майже 100 копій. Почавши працювати під Windows, програмісти надсилали в Microsoft
свої зауваження, змушуючи розробників ще і ще відшліфовувати Windows,
облегчаянапісаніе додатків. Був замінений мова, якою создавалсяWindows
(Спочатку це був Microsoft Pascal, потім Lattice C і, нарешті, Microsoft C Compiler
). Орієнтація на Microsoft CCompiler також була однією з причин затримки
робіт надпроектом, тому, що сам компілятор не був готовим продуктомі постійно
удосконалювався. Однак, незважаючи на те, що в листопаді 1985 року Windows все
ж вийшов на прилавки магазинів, протягом двох років (з 1985 по 1987 рік) Windows
не надав великого впливу на ринок програмного забезпечення і не став альтернативою
MS-DOS, як сподівався Microsoft. Велика кількість користувачів (51%)
купували Windows не заради створених для нього додатків (яких було дуже мало
в порівнянні із звичайними програмами під MS-DOS) або графічного інтерфейсу,
а для того, щоб мати можливість швидко переключатися з одного DOS програми
на інше. З 1987 року ситуація почала змінюватися. Почали з'являтися потужні і відомі
додатки, переписані для роботи під Windows. Зараз можна назвати
такі продукти як Page Maker під Windows, дуже потужна електронна таблиця Excel,
Windows Graph, Word for Windows і багато інших. З виходом третьої версії Windows
стало ясно, що Windows не просто завоює міцне місце на ринку програмного
забезпечення, але стане основою стратегічної політики Microsoft у створенні
програмного забезпечення. Windows 3.0 викликав справжній фурор, пропонуючи абсолютно
приголомшливу графіку і нові, несподівані можливості. У липні 1990 року
"PC Magazine" помістив статтю про нову версію Windows 3.0, в якій зазначалося,
що Microsoft Windows перетворився на блискучу багатозадачного операційну систему,
якої ще намагається стати OS/2. Як і всі програмні продукти Microsoft,
перші версії Windows не виправдовували сподівань не дивлячись на те, що виходили із значними
затримками, але в своєму останньому варіанті залишають конкурентів далеко
позаду. ОГЛЯД ОСНОВНИХ ПРИНЦИПІВ ОРГАНІЗАЦІЇ інтерфейсу В WINDOWS Для розуміння
принципів організації інтерфейсу Windows необхідно мати уявлення про
основних її елементах, на яких побудовано виконання програм та взаємодія
програми і користувача. Весь інтерфейс Windows грунтується на трьох китах: -
апаратно-незалежна графіка; - стандартний віконно-орієнтований інтерфейс; -
взаємодія програм з системою Windows і між собою за допомогою передачі
повідомлень; Дані елементи системи Windows найтіснішим чином пов'язані між
собою, разом утворюють цілісну систему і окремий розгляд кожного з
них у відриві від інших не має сенсу. Перераховані вище елементи системи Windows
нижче будуть розглянуті більш детально, а поки коротко зупинимося на тому,
що вони з себе представляють. Апаратно-незалежний графічний інтерфейс (GDI)
Будь-яка програма для Windows може виконувати висновок на будь-який пристрій за допомогою
одного і того ж набору викликаються підпрограм. Причому для Windows додатку
всі пристрої виглядають однаково і програмісту не потрібно забодітся про управління
конкретним пристроєм на низькому рівні. Кожен пристрій має свій драйвер,
відповідальний за фактичне виконання графічного виводу. Для пристроїв, яким
при цьому необхідна допомога, GDI забезпечує програмну емуляцію, що використовує
для реалізації функцій високого рівня засоби низького рівня цього пристрою.
При поданні інформації на екран дисплея GDI забезпечує віконно-орієнтовану
графіком. Це означає, що кожне вікно розглядається як окрема галузь
промальовування. Коли програма виконує у вікні промальовування, то координати по
умовчанням встановлюються так, що точка початку координат (0,0) знаходиться у верхньому
лівому куті клієнтних області вікна. Крім того, малюнки автоматично відсікаються
по межах вікна. Подібні механізм захисту працює двосторонньо, тобто
ні ви не можете намалювати що-небудь поза свого вікна, ні інша програма намалювати
что-то в вашому вікні. Стандартний віконно-орієнтований інтерфейс Система
Windows має вбудовану підтримку ряду об'єктів для користувача інтерфейсу:
вікон, піктограм, меню, блоків діалогу і т.п.Окно Вікно представляетсобойсамуюважнуючастьпользовательского
інтерфейсу. Вона відіграє ключову роль. Для програміста
вікно служить для організації інших об'єктів для користувача інтерфейсу
і направляє проходження повідомлень у системі, вікно забезпечує область екрану
для зв'язку з користувачем. Вікно - це самостійно існуючий об'єкт, параметри
якого описані в спеціальних структурах даних, а поведінка функцією
вікна. Кожне вікно належить класу вікон. Клас вікон - це шаблон, за яким
реалізуються реальні вікна. З кожним класом вікон і, отже, з кожним вікном
пов'язаний спеціальний тип підпрограми, що називається процедурою вікна. Завдання процедури
вікна полягає в обробці надходять вікна повідомлень. Кожна програма розташовується
у своєму власному вікні і має принаймні хоча б одне вікно
- Головне вікно програми. З додатку Windows безпосередньо не можна здійснити
виведення на екран, так як екран є розділяються ресурсом, а засобом
його поділу є вікна. Таким чином, перш ніж відобразити що-небудь на
екрані, потрібно створити вікно, і тільки у вікні можна здійснити вивод.Піктограмми
Піктограма представляетсобой невеликий малюнок, який служить для користувача
нагадуванням про що-небудь іобозначают команду, програму або деякі дані.
Меню Меню є список команд і функцій програми. Є п'ять типів
меню: - системні, - горизонтальні, - що випадають, - вкладені, - спливаючі.
Системні меню забезпечують стандартний набір операцій, які можуть бути виконані
з вікном (переміщення, зміна розмірів, закриття, перемикання на іншу
завдання і т.д.). Це меню обов'язково знаходиться в головному меню кожної програми.
Горизонтальне меню фіксовано прив'язується до верху вікна. Що випадають меню
з'являються при виборі відповідних пунктів горизонтального меню. Вкладені
меню з'являються при виборі відповідних пунктів випадають меню. Прикладна
програма може вкладиватьодно меню в другое до будь-якого рівня вкладеності. Спливаючі
меню можуть розташовуватися в довільній позиції у вікні і фактично в
будь-якій позиції на екрані дісплея.Полоси прокручування Використовуються в тих випадках, коли
об'єкт даних більше розмірів вікна. Смуги прокрутки бувають вертикальними і
горизонтальними. Вони дозволяють користувачеві керувати відображенням великих обсягів
даних і мати до них доступ.Существует обмеження на обсяг даних в скролінгу.
Об `єм даних не може перевищувати 64 Кбайт.Курсори Курсор являє собою
бітовий образ, переміщуваний по екрану у відповідь на переміщення миші або іншого
координатного пристрою. Програма може змінити формукурсора, щоб відобразити
деяка зміна в сістеме.Каретка Каретка - це невелика бітова матриця,
яка є відміткою фокуса введення з клавіатури. Вікно, що управляє введенням
з клавіатури може створити каретку, щоб повідомити користувачеві про цей факт.
Інтерфейс користувача Windows підтримує тільки одну каретку на екране.Блокі
діалогу Блок діалогу - це стандартний спосіб прийому програмою введення
від користувача. Типовий приклад блоку діалогу - це блок діалогу для відкриття
файлу. Блок діалогу являє собою вікно, що містить всередині себе окремі вікна,
які або виводять деяку інформацію, або дозволяють прийняти введення від
користувача. Кожен з цих вікон називається елементом управління діалогом. Система
має шість наперед визначених класів вікон, на базі яких створюються елементи
управління блоками діалогу: - кнопки; - комбіновані блоки; - елементи управління
редагуванням; - блоки списків; - смуги прокрутки; - статичні елементи.
Більш повний опис об'єктів інтерфейсу представлено нижче. Механізм повідомлень
У системі Windows будь-який додаток будується як сукупність обробників різних
подій, які відбуваються абсолютно незалежно один від одного. Кожне
подія генерує, повідомлення, що передаються всіх програм, для яких
воно може становити інтерес. Програма представляє собою 16-бітове значення
без знака, якому для зручності надається символьний константа. Всі
повідомлення мають єдиний формат і є єдиним засобом зв'язку програми
з операційною оболонкою і з іншими додатками. Деякі повідомлення можуть
у свою чергу породжувати інші повідомлення. При надходженні повідомлення про події
подію, це повідомлення міститься в системну чергу Windows. Системна чергу
в Windows одна. Після цього повідомлення з системної черги розподіляються
між додатками. Для кожної програми Windows організовує і підтримує
окрему чергу, куди пересилаються всі повідомлення, для цього пріложенія.Обработку
черги програми здійснює сам додаток. Якщо повідомлення надійшло наприклад
від пристроїв введення, таких як миша або клавіатура, то для визначення адресата
повідомлення використовується поняття "фокус вводу". Так як користувач у кожен
момент часу може працювати тільки з однією програмою. Таким чином, кажуть,
що додаток, в яке потрапляють повідомлення від клавіатури в момент введення,
має фокус вводу, тому всі повідомлення від пристроїв введення інформації надходять
з системної черги в чергу програми, що має фокус введення в даний момент.Для
обработкіпоступающіх повідомлень в программеорганізуется цикл повідомлень,
який створюється при прісозданіі вікна програми. Цикл повідомлень витягує
сообщеніяіз черги і передає їх функції управління соответствующімокном програми,
причому не безпосередньо а через Window. Про функцііокна додатків піде мова
пізніше. Всі стандартні повідомлення, визначені в системі Windows можна розділити
на кілька груп: - апаратні (вхідні дані від мишки і клавіатури); - про організацію
вікна (повідомлення, вимога дії, запит); - оборганізаціі інтерфейсу
користувача (меню, покажчик миші, лінійка прокрутки, блоки діалогу, MDI); -
про завершення (закриття прикладної програми або системи); - приватні (елементи
управління блоком діалогу: редактор кнопка, блок списку, комбо-блок); - повідомлення
про системний ресурс (зміна кольору, шрифти, буферизація друку, режими
роботи пристроїв); - про спільне використання даних (буфер вирізаного зображення
і динамічний обмін даними DDE); - внутрішні системні (недокументовані
повідомлення). Нижче будуть більш детально розглянуті перераховані класи повідомлень
в контексті їх застосування. Особливу увагу буде приділено повідомленнями із взаємодії
між пріложеніяміі спільного використання даних. ІНТЕРФЕЙС графичЕСКІХ
Пристроїв (GDI) В даному розділі розглядаються питання пов'язані з
створенням графічного виводу, обговорюються різні типи графічного виводу,
підтримуваних інтерфейсом графічних пристроїв (GDI). GDI являє собою
бібліотеку графічного виводу Windows. GDI забезпечує графічний висновок на
екран дисплея і на пристрої для отримання твердих копій, наприклад, принтери і
плоттери. GDI відповідає за створення відображення кожній лінії, букви або графічного
знака, що виводиться програмою для Windows. Сама Windows використовує GDI при
добірці елементів, що становлять для користувача інтерфейс, - вікон, піктограм,
меню, блоків діалогу і т.д. Пристрої GDI Інтерфейс графічних пристроїв дозволяє
виконувати графічне виведення на різні пристрої. Для того, щоб GDI
працював з конкретним пристроєм, необхідний спеціальний елемент програмного
забезпечення - драйвер пристрою, який перетворює запити графічного виводу
в конкретні дії для малювання на конкретному пристрої. Крім цього,
драйвер пристрою представляє GDI набір прапорів, які повідомляють, якими графічними
можливості має даний пристрій. Існує п'ять наборів таких
прапорів: для кривих ліній, для прямих, багатокутників, бітових образів і текстів,
які повідомляють GDI, коли можна направити пристрою безпосередньо запит,
а коли такий запит треба попередньо перетворити в послідовність
запитів низького рівня. Це залежить те можливостей конкретного пристрою.
Крім фізичних пристроїв GDI підтримує логічні пристрої, або псевдоустройства.
Псевдоустройства служать для зберігання зображень. На відміну то фізичних
пристроїв, які виводять зображення на певній апаратній базі,
псевдоустройства дозволяють "перехопити" образ зображення в оперативній пам'яті
або на диску. GDI підтримує два типи псевдоустройств: бітові образи і метафайли.
Бітові образи мають прямокутну форму і зберігають зображення у пам'яті в
такому вигляді, в якому графічні образи зберігаються дисплейними адаптером, і забезпечують
швидке отримання копії картинки. Бітові образи використовуються і для зберігання
образів, які потрібно швидко виводити на екран, наприклад, піктограми, курсори
і т.д.Метафайли створюються засобами запису-відтворення GDI. Сточкізреніярасходуемойпамяті
метафайлипредпочтітельнее, ніж бітові образи, проте
робота сніміпроісходіт повільніше. Зазвичай в метафайлу зберігаються крупниеізображенія.
Логічні об'єкти графіки GDI Одним із засобів досягнення апаратної незалежності
GDI є використання логічних об'єктів графіки. Такий об'єкт
описує, яким чином повинен виконуватися висновок, це високорівнева апаратно-незалежний
запит. GDI підтримує наступні логічні об'єкти графіки: - пір'я
(для малювання ліній); - кисті (для забарвлення областей); - шрифти (для виведення
текстів); - логічні кольору (що описують кольору виведення). Після створення логічного
об'єкта він може бути використаний у відношенні будь-якого пристрою, при цьому
драйвер кожного пристрою по своєму інтерпретує логічний об'єкт способом,
відповідний можливостей пристрою. Контекст пристрою Контекст пристрою представляетсобой
некотороемножество атрибутів графічного виводу, в яке
входить одноперая для малювання ліній, один пензель для забарвлення областейі
один шрифт для виведення текстів, які можна змінити закохав момент. Разом
узяті, атрибути графічного виводу даютполний контроль над тим, як виглядає
і де виполняетсяграфіческій висновок програми. Кожен контекст пристрою включає
в себе 20 атрибутів графічного виводу, які наведені нижче (в дужках наведено
значення за замовчуванням): - Колір фону (білий); - Режим фону (OPAQUE); - Логічний
номер кисті (біла кисть); - Початок координат кисті (0,0); - Логічний номер
області промальовування (вся поверхня); - Логічний номер кольорової палітри (палітра
за умовчанням); - Поточне положення пера (0,0); - Графічний виведення
(R2_COPYPEN); - Логічний номер шрифту (системний шрифт); - міжсимвольний інтервал
(0); - Режим отбраженія (MM_TEXT); - Логічний номер пера (чорне перо); - Режим
зафарбовування багатокутників (альтернативний); - Режим розтягування (чорний з
білому); - Вирівнювання кордонів тексту (по лівому і верхньому краях); - Колір тексту
(чорний для тексту і кистей з монохромним шаблоном забарвлення); - Вирівнювання
рядків тексту (0,0); - Протяжність вікна на цьому екрані (1,1); - Початок координат
вікна на цьому екрані (0,0); - Протяжність вікна екрану (1,1); - Початок координат
вікна екрану (0,0). Контекст пристрою пов'язує програму з конкретною поверхнею
малювання. Таке поєднання є логічним, а не фізичною. Щоб
уникнути конфліктів, пов'язаних зі спільним використанням пристроїв, програма
отримує у контексту пристрою "пропуск" до пристрою. Робота системи пропусків
залежить від типу пристрою. На пристроях одержання твердих копій це робиться
шляхом буферизації введення, а на відеотехніка - шляхом виділення так званої
області промальовування, поза межами якої програма малювати не може. Основні
атрибути контексту пристрою Для малювання ліній самим важливим атрибутом контексту
пристрою є перо, що визначає, як буде виглядати лінію: її
колір, ширина і стиль (або шаблон, наприклад, суцільна лінія, пунктиром тощо) та представляє
з себе запит до пристрою на малювання лінії певного виду.
При малюванні ліній також використовується атрибут - режим графічного виводу, в
якому можна поставити логічну операцію, щоб застосувати її при виведенні між
новим і старим пікселями. Для забарвлення областей використовується атрибут кисть,
визначає як буде виглядати закрашується область і характеризується трьома
характеристиками: стилем, кольором і шаблоном. Розмір кисті складає 8х8 пікселів.
При зображенні тексту ключовим атрибутом є шрифт. Шрифт - сукупність
шаблонів для виведення тексту. GDI розпізнає два види шрифтів: логічні
і фізіческіе.Логіческій шріфтопісивает текст стандартним незалежних від зовнішніх
пристрою. Він вибирається з опису, що міститься в логічному шрифт і може
бути апаратно реалізований. Для завдання атрибуту контексту пристрою використовується
функція SelectObject, описана в такий спосіб: HANDLE FAR PASCAL SelectObject (HDC,
HANDLE); Тут перший параметр - логічний номер контексту пристрою,
а другий - логічний номер значення ознаки. Для того, щоб отримати
логічний номер необхідного значення ознаки контексту, використовується функція GetStockObject.
Її прототип: HANDLE FAR PASCAL GetStockObject (int); Параметром являетсязначеніеатрібутаконтекстаустройства,
звичайно для зручності що задається в
вигляді наборасімволов. Програміст може використовувати або вже задані значення атрибутів,
або створювати свої нові. Перемальовування області і зображення пікселів
Через те, що Windows не накладає обмежень на розміри і розташування вікон
додатків, що можуть виникнути ситуації, що вікно однієї програми перекриє
вікно іншої програми, тому при перемиканні між додатками необхідно
перерісовить пошкоджені області вікна. Для цієї мети використовується підпрограма
BeginPaint. При отриманні повідомлення WM_PAINT, що говорить про необхідність перемальовування
вікна з зміни його розмірів або відновлення пошкодженої ділянки,
підпрограма BeginPaint отримує контекст пристрою і визначає область, яку
треба перерісовать.Подпрограмма BeginPaint прінімаетдвапараметра: логічний
номер вікна і покажчик на структуру даннихPAINTSTRUCT, Вона повертає логічний
номер контексту пристрою, необхідний для малювання пікселя. Прототип підпрограми
має вигляд: HDC FAR PASCAL BeginPaint (HWND, LPPAINTSTRUCT); Структура PAINTSTRUCT
визначена так: typedef struct tagPAINTSTRUCTHDChdc; BOOLfErase; RECTrcPaint; BOOLfRestore; BOOLfIncUpdate; BYTErgbReserved [16];
PAINTSTRUCT; hdc -
логічний номер контексту пристрої; fErase - прапор, що задає необхідність стирання
вікна; rcPaint - описує прямокутник, огранічівающійповрежденную область;
fRestore, fIncUpdate і rgbReserved призначені для внутрішнього використання
Windows.Для отображеніяпікселя використовується подпрограммаSetPixel. Її прототип: DWORD
FAR PASCAL SetPixel (HDC, int, int, DWORD); HDC - логічний контекст
пристрої; наступні два параметри - координати пікселя; останній параметр
- Колір. Після завершення перемальовування, програма викликає функцію EndPaint, щоб
повернути контекст пристрою дисплея Менеджеру Вікон і повідомити, що вікно відновлено.
Коли той отримує контекст пристрою, він відновлює всі його атрибути
за умовчанням, і контекст пристрою готовий до передачі інформації будь-якій програмі,
якої знадобиться намалювати вікно. Підпрограма EndPaint має прототип: void
FAR PASCAL EndPaint (HWND, LPPAINTSTRUCT); Малювання ліній Кожна лінія
має початкову та кінцеву крапку, і GDI малює лінію так, початкова точка включається
в лінію, а кінцева виключається з лінії. GDI має 4 підпрограми для малювання
ліній: MoveTo, LineTo, PolyLine і Arc. Підпрограма MoveTo поміщає пару
координат XY в атрибут контексту пристрою, який називається поточною позицією.
Підпрограма має прототип: DWORD FAR PASCAL MoveTo (HDC, int x1, int y1
); Підпрограма LineTo бере початкову точку з атрибуту поточної позиції і малює
лінію до кінцевої точки, що передається як параметр. Після цього вона встановлює
нове значення атрибуту поточної позиції. Підпрограма має прототип: BOOL
FAR PASCAL LineTo (HDC, int x1, int y1); Підпрограма Polyline дозволяє намалювати
ламану лінію, але для її роботи необхідно попередньо створити масив
координат точок. Підпрограма має прототип: BOOL FAR PASCAL Polyline (HDC, LPPOINT
points, int num); points - вказівник на масив координат, якому координати
осі абсцис і осі ординат чергуються; num - число пар координат у масиві.
Підпрограма Arc дозволяє намалювати дуги еліпса. Передані параметри визначають
прямокутник, що обмежує фігуру, якщо б вона була повною, початкову
точку і кінцеву. Підпрограма має прототип: BOL FAR PASCAL Arc (HDC, int, int, int, int, int, int, int, int);
Малювання зафарбованих фігур Для малювання зафарбованих
фігур існує семьразлічних функцій. Функція Polygon з'єднує розташовані
послідовно точки за допомогою поточного встановленого в контексті пристрою
пера. Функція визначена так: BOOL FAR PASCAL Polygon (HDC, LPPOINT, int); HDC
- Логічний номер контексту пристрої; LPPOINT - вказівник на масив координат,
з'єднуються граничних точок; Третій параметр - число що з'єднуються точок. Функція
PolyPolygon дозволяє намалювати за один виклик кілька багатокутників і
визначена так: BOOL FAR PASCAL PolyPolygon (HDC, LPPOINT, LPINT, int); HDC - логічний
номер контексту пристрої; LPPOINT - вказівник на масив координат, що з'єднуються
граничних точок всіх створюваних багатокутників; LPINT - покажчик на
масив типу int. Елементи масиву задають число точок у кожному багатокутнику *
Останній параметр задає кількість точок у масиві LPINT, тобто кількість
багатокутників. Для малювання зафарбованою еліпса використовується функція Ellipse.
Вона визначається так: BOOL FAR PASCAL Ellipse (HDC, int, int, int, int); HDC -
логічний номер контексту пристрої; Решта параметриопределяют коордінатиогранічівающего
прямокутника. Функція Chord використовується для малювання часткової
дуги, кінці якої з'єднані сегментом лінії. Для цього також використовується
обмежує прямокутник. Визначення функції наступне: BOOL FAR PASCAL Chord (HDC, int,
int, int, int, int, int, int, int); HDC - логічний номер контексту
пристрої; Наступні чотири параметри визначають коордінатиогранічівающего прямокутника.
Далі вказуються координати початкової і кінцевої точки сегменту лінії.
Функція Pie аналогічна функції Chord, тільки малює не хорду, а сектор еліпса.
Вона визначена в такий спосіб: BOOL FAR PASCAL Pie (HDC, int, int, int, int, int,
int, int, int); HDC - логічний номер контексту пристрої; Наступні чотири
параметри визначають коордінатиогранічівающего прямокутника. Далі вказуються
координати початкової і кінцевої точки сектора.Для малювання прямокутника
використовується функціяRectangle.Ее прототип: BOOL FAR PASCAL Rectangle (HDC, int,
int, int, int); HDC - логічний номер контексту пристрої; Решта параметриопределяют коордінатипрямоугольніка.
Якщо потрібно намалювати прямокутник з
закругленими краями, то є функція RoundRect. Вона визначена та: BOOL FAR
PASCAL RoundRect (HDC, int, int, int, int, int, int); HDC - логічний номер контексту
пристрої; Наступні чотири параметри визначають коордінатипрямоугольніка.
Останні два параметри задають ширину і висоту обмежує прямокутника для
еліпса, що використовується при скруглення кута. Виведення тексту Для перегляду тексту є
п'ять основних функцій. Функція TextOut призначена для виведення одного рядка.
Вона визначена в такий спосіб: BOOL FAR PASCAL TextOut (HDC, int, int, LPSTR,
int); HDC - логічний номер контексту пристрої; Наступні два параметри
визначають координати точки прив'язки що виводиться стоки текста.LPSTR - покажчик на
виведену символьну строку.Последній параметр - кількість символів в рядку тексту.
Більш потужний варіант функції TextOut є функція ExtTextOut.
Вона дозволяє керувати інтервалом між рядками та вирезкойBOOL FAR PASCAL ExtTextOut (
HDC, int, int, WORD wOptions, LPRECT lpRect, LPSTR lpString, WORD nCount, LPINTlpDx
); HDC - логічний номер контексту пристрої; Наступні два параметри
визначають координати точки прив'язки що виводиться стоки тексту. wOptions - прапор,
приймає значення 0, ETO_CLIPPED, ETO_OPAQUE і ETO_CLIPPED | ETO_OPAQUE, що дозволяє
встановлювати прямокутні області вирізки і при виведенні тексту затирати
фон.lpRect - покажчик на структуру прямокутника; lpString - покажчик на виведену
символьну строку.nCount - кількість символів в рядку тексту. lpDx-вказівник
на масив значень інтервалів междусімволамі. Функція TabbedTextOut при виведенні
тексту поширює знаки табуляції до позицій табуляції. Це забезпечує
зручний спосіб вирівнювання стовпців даних. Прототип функції: LONG FAR PASCAL
TabbedTextOut (HDC, int, int, LPSTR, int, LPINT, int); HDC - логічний номер контексту
пристрої; Наступні два параметри визначають координати точки прив'язки
виводиться стоки текста.LPSTR - покажчик на виведену символьну строку.Следующій
параметр - кількість символів в рядку тексту. LPINT - вказівник на масив позицій
табуляції; Останній параметр - число елементів масиві позицій табуляції.
Функція DrawText забезпечує деяку можливість форматування і перехід в автоматичному
режимі на нову сходинку при великій кількості рядків тексту. Її прототип: int
FAR PASCAL DrawText (HDC, LPSTR, int, LPRECT, WORD); HDC - логічний
номер контексту пристрої; LPSTR - покажчик на виведену символьну строку.Следующій
параметр - кількість символів в рядку тексту. LPRECT - покажчик на структуру
прямокутника, що визначає позицію виводу і кордони для форматування. Останній
параметр визначає режим форматірованія.Для отображеніязаблокірованнихпунктов
меню ізаблокірованних елементів управління блоками діалогу МенеджерОкон
використовує функцію GrayString. ЕЛЕМЕНТИ віконного інтерфейсу Вікна Windows Головне
вікно додатка Кожна програма розташовується в своєму власному вікні
і має принаймні хоча б одне вікно - головне вікно програми. З програми
Windows безпосередньо не можна здійснити виведення на екран, так як екран є
розділяються ресурсом, а засобом його поділу є вікна. Таким чином,
перед тим, як відобразити що-небудь на екрані, потрібно створити вікно, і тільки в
вікні можна здійснити виведення. Функція головного вікна програми виконує в програмі
ту ж роль, що функція main () програми на Сі для MS-DOS. При створенні
вікна функція бібліотеки SDK виконує спеціальні дії початкової підготовки
в DOS, не явно здійснюваних функцією main (). Тому програма не містить
функції main (), роль якої виконує функція WinMain (), яка одержує управління
в початковий момент завантаження програми. Функція WinMain () виконує наступні
основні дії: - регістраціякласса вікна програми, але другіеініціалізаціі; -
створення основного вікна програми, але, можливо, інших, підпорядкованих вікон; - запуск
циклу обробки повідомлень, які розміщені в чергу програми; - завершення роботи
програми при витягу з черги повідомлення WM_QUIT. Прототип функції WinMain
виглядає так: int PASCAL WinMain (HANDLE instance,// дескриптор попередньої
копііHANDLE prevInstance,// попередня копіяLPSTR cmdLine,// покажчик на командну
строкуintcmdShow// прапор "вікно відкрито/закрито"); instance - однозначноопределяеткаждуюкопіюпріложенія,
Якщо програму запущено кілька разів. prevInstance
- Визначає копію цього додатка, яка була останньою активної
копією. Якщо цей параметр дорівнює 0, то інших копій програми, що виконуються в
даний момент не існує. cmdLine - далекий покажчик на командний рядок, що закінчується
нулем. Він дозволяє додаткам отримувати дані через командний рядок.
cmdShow - визначає, як додаток спочатку відображати на екрані:
піктограми (cmdShow = SW_SHOWMINNOACTIVE) або у вигляді відкритого вікна (cmdShow
= SW_SHOWNORMAL). Константи SW_SHOWMINNOACTIVE і SW_SHOWNORMAL визначені під включається
фото windows.h. Реєстрація класу вікна Будь-яке вікно належить до одного
з існуючих класів. Клас вікна повинен бути створений до того, як вікно буде
відображено на екрані. Клас вікна визначає загальні властивості всіх вікон даного
класу, наприклад: форму курсора при переміщенні його в області вікна або ім'я меню,
визначеного для вікон цього класу. Характеристики вікна задаються при реєстрації
класу вікна (у структурі класу вікна) і при створенні вікна. Найбільш загальні
характеристики вікон задаються при реєстрації класу вікна. Вікна, створювані при
допомогою функції CreateWindiw, повинні мати зареєстрований раніше клас вікон.
Є кілька стандартних класів вікон із заздалегідь визначеними властивостями. Однак,
як правило, кожен додаток реєструє свій власний клас з тим,
- Покажчик на функцію підтримки вікна. Короткий опис цієї функції дивись
в наступному розділі. style - містить набір прапорів, що визначають властивості вікна.
За замовчуванням присвоюється NULL.hBrBackground - визначає колір фону вікна. hCursor
- Визначає курсор, що використовується в даному вікні за умовчанням. hIcon - визначає
піктограму (icon), що буде відображатися при перекладі вікна в неактивна
стан. lpszMenuName - покажчик на ім'я меню вікна, визначена у файлі
ресурсів. cbClsExtra - визначає кількість байт, яке необхідно додатково
запросити в Windows під цю структуру. Цей об'єм пам'яті буде зарезервовано
в кінці структури для всіх вікон даного класу. clWndExtra - визначає число
байт, яке необхідно додатково запросити в Windows для розміщення всіх
структур, що створюються спільно з даним класом. Після визначення полів структури
WNDCLASS необхідно зареєструвати клас за допомогою функції RegisterClass.BOOL
FAR PASCAL RegisterClass (LPWNDCLASS winClass); Якщо реєстрація класу
пройшла успішно, то повертається значення TRUE, в іншому випадку - FALSE. При
реєстрації класу вікна Windows копіює структуру, яка описує клас вікна, в
системну область, щоб іншим копій програми вже не треба було її реєструвати.
Функція вікна програми Функція вікна програми зан