Въведение в WinAPI

Най-накрая! Най-накрая! Днес ние започваме да се създаде прозорец пълноправен Windows. Сбогом нещастен конзола.

До сега, вие вече трябва да е добра идея да знаете синтаксиса на C ++, да могат да работят с клонове и линии, добро разбиране на работните функции. Ако се занимавате с морска битка, можете да се предположи, че сте научили всичко това.

унгарската нотация

Целият код, който ще се срещнем в WinAPI написани на унгарски форма. Това е споразумение за писане на код.

В този случай името на променливата се поставя първоначален вид. Всички думи на имената на променливите и функциите започват с главна буква.

Ето няколко представки:

б - променлива от тип BOOL.
л - променлива от тип дълго число.
w - от дума (дума) - 16 бита. Променлива от тип неподписан кратко.
DW - от двойна дума (DWORD) - 32 бита. Променлива от тип неподписан дълго.
SZ - Онлайн приключва нула (низ прекратен нула). Просто един обикновен низ, което сме свикнали постоянно.
р или LP - стрелка (от показалеца). LP (от дълго показалка) - данни показалеца преминава от миналото. Сега LP и р означават едно и също нещо.
ч - дръжка (на дръжката).

За пример, показалецът ще се нарича по този начин:

Тази форма на писане, използван от Microsoft. Мнозина критикуват този метод за именуване на променливи. Но такива неща (кодиране конвенции) са жизнено важни в големи компании.

Позволете ми да ви напомня, че постоянните идентификатори обикновено се състоят само от главни букви: WM_DESTROY. WM_DESTOY - е 2, константа определя чрез определи.

И още нещо, което не разбираме. Признаци често се определят с NULL. Помислете за това само 0 и насоки, които определят до NULL (нула), не се отнасят към всеки място в паметта.

Windows API (WinAPI)

Всички програми на Windows използват специална WinAPI програмен интерфейс. Това е набор от функции и структури на езика C, благодарение на които вашата програма става съвместим с Windows.

Windows API има големи възможности за работа с операционната система. Човек би могъл дори да се каже - неограничени.

Ние не смятаме, че дори и един процент от всички възможности WinAPI. Първоначално исках да отнеме повече материал, но това ще отнеме твърде много време, и затънал в WinAPI на блато, DirectX'a докато стигнахме до една-две години. Описание WinAPI отнеме два урока (включително и тази). В тях ще се спрем само рамката на заявление за Windows.

Програма под Windows по същия начин, тъй като програмата под DOS, има за основна функция. Тук функция, наречена WinMain.

програма на Windows се състои от следните компоненти (всичко това се случва вътре WinMain):

Създаване и регистриране на клас прозорец. Да не се бърка с класовете на C ++. WinAPI написан на C, няма часове в обичайния смисъл на думата.
Създаване на прозореца на програмата.
Основната линия, в която се обработват съобщения.
Обработка на съобщенията на програмата в рамките на процедурата на прозореца. Процедурата на прозорец е стандартна характеристика.
Тези четири точки - Windows-базирана програма за. През този и следващия урок ще разгледаме всичко това в подробности. Ако се заби в описанието на програмата, а след това се върнете към тези точки.

Сега Нека всичко се разгледа по-подробно:

WinAPI: WNDCLASS Структура

На първо място трябва да се създаде и да обсипе структура променлива WNDCLASS, а след това въз основа на нея да се регистрирате прозорец клас.

Ето тази структура:


WNDCLASS структура, съставена WinAPI определя основните свойства на новия прозорец: икони, курсора на мишката, независимо дали са от менюто, което ще принадлежи прозореца на приложението.

След като завършите структурата, на базата на това, можете да се регистрирате клас прозорец. Ние не говорим за тези класове в C ++. Вместо това, тя може да се предположи, че класът на прозорец е шаблон, който можете да го регистрира в системата, а сега можете да създадете няколко прозореца, основаващи се на този шаблон. И всички тези прозорци ще имат свойствата, че определени в променливата WNDCLASS на структура.

WinAPI: CreateWindow функция

След като се регистрирате класа на прозореца, въз основа на него е създаден главния (сега сме качили на втората точка) прозорец на приложението. Това се прави с помощта на CreateWindow функция. Той има следния прототип:


Ако клас прозорец (WNDCLASS структура) са дадени основните свойства на прозореца, тук - по-специфични за всеки прозорец: размер прозорец, местоположение.

Тази функция връща манипулатор към прозореца. С помощта на една дръжка, можете да получите достъп до прозореца, това е около като идентификатор.

Моля, имайте предвид, че има много нови видове. В действителност всички те са стари, просто заменен. Например: HWND - този тип предефиниране дръжка, която от своя страна е замяна PVOID, което от своя страна е замяна невалидни *. Как дълбоко заровени истината! И все пак тип HWND - указател към анулира.

Прозорецът се състои от няколко части. Почти всяка програма ще видите: заглавната лента, системното меню (ако кликнете върху иконата на приложението в горния ляв ъгъл на прозореца), три системни бутони за работа с прозореца: минимизиране, максимизиране на цял екран и близки. Също така, почти винаги се представя в менюто на приложението. Това е само последният ние просто няма. И, разбира се, по-голямата част на прозореца е заета от т.нар клиент област, която обикновено е създаден и работи от страна на потребителя.

Толкова за режим на прозорец. Доста дълго време, ние ще практикуват с DiectX то в прозореца - няма да използва режим на цял екран.

Обработка на съобщенията (Message боравене)

Основната разлика между всички наши предишни програми от програмите по Windows обработва съобщения.

Например, когато потребителят натисне произволен клавиш от клавиатурата, съобщение се генерира, че ключът е бил натиснат. След това съобщение се доставя до приложението, което е активно, когато потребителят натисне ключ.

Тук сме като е настъпило събитие (събитие) - ключът е бил натиснат.

Едно събитие може да бъде: Преместете курсора на мишката, да промените фокуса на кандидатстване, клавишите от клавиатурата, затворете прозореца. Събития много. Много! За втората десет събития може да се появи в операционната система.

Така че, когато е налице едно събитие, операционната система създава съобщение: това е бил натиснат клавиш, курсорът координира промяна чрез отваряне на нов прозорец.

Съобщенията могат да причинят на операционната система и различни приложения.

Съобщението е структура, и, както следва:


Забележете как, използвайки typedef предефинирани структура.

За да създадете тази структура, можете да използвате следния код:

Всичко. След това можете да използвате тази структура, както обикновено.


Тук, на полето, който съдържа код на съобщението (името на съобщението е в сравнение с постоянното WM_DESTROY WM -. От Windows съобщение (съобщение Windows) WM_DESTROY -. Това е послание, което се генерира, когато прозорецът е затворен (унищожи - унищожи).

Докладване код определят от константи и представката са WM_: WM_CLOSE, WM_CREATE и сътр.

Структурата на MSG отговаря тип HWND - от дръжката на прозореца (дръжка прозорец или дръжка прозорец). Това е едно от нещата, които "описва" прозорец. Това е нещо като идентификатор (име прозорец) един.

Не забравяйте, че думата - дръжка (дръжка, дръжката). В Windows този термин се използва много често. Почти всички видове Windows, започващи с H - описания: икони от описание: шрифт ЕВРОВОК, дръжката на приложение, например. Те бяха около тридесет, доколкото си спомням.

Всички взаимодействие между приложения в Windows са направени с помощта на същите тези дръжки на прозореца (HWND).

Има и друг важен ЕВРОВОК - приложението ЕВРОВОК (HINSTANCE - първият параметър WinMain) - уникален идентификатор на заявлението, с което операционната система няма да бъде в състояние да се смесват две различни програми. Това е като бар код. Ще разгледаме по-късно.

Всеки път, когато потребител извършва действие, създава и попълва съобщение: уточнява дръжката на прозореца, че трябва да получите това съобщение, идентификационния номер се задава, изпълнена с параметри попълнени време (ток) и определя координатите на курсора на мишката (виж структура).

След това, съобщението се съобщения от опашката на операционната система. Когато става дума за цялото ни съобщение, то се изпраща към правилния прозореца (прозорците знае какво прозорец към всяко съобщение чрез описания). Когато дадено съобщение идва в заявлението, се съобщения от опашката за кандидатстване. Веднага след като той осъзнава всичко, тя се обработва.

Виж, между времето, когато потребителят е направил всяко действие (събитието случило и да генерира съобщение) и времето, когато програмата е отговорил на това действие (съобщението е обработена от програмата), има много събития. В крайна сметка, както в Windows Message Queuing и опашката приложни съобщения могат да бъдат много съобщения. В първия случай можем да говорим за стотици, а във втория случай, поне някои от тях.

Процедурата за прозорец (процедура прозорец - WndProc)

Ние продължаваме с момента, в който съобщението имам към всички съобщения за кандидатстване. След него за всичко постигнато, то се обработва. Процедура за прозорец - за обработка на съобщенията във всяка програма за специална функция трябва да съществува. Обикновено това се нарича WndProc (от процедурата Window). Call процедура прозорец се намира в главния цикъл и се изпълнява по време на всяка итерация на цикъла.

Съобщения (под формата на структурни променливи MSG) попадат в тази функция като параметри: дръжка прозорец, идентификатор на съобщение и два параметъра. Моля, имайте предвид, че процедурата за прозорец не се предава време и pt област. Това означава, че съобщението е вече "демонтирани".

Вътре процедурата за прозорец намира разклонение превключвател, в които има проверка на ID на съобщението. Ето един прост лечение прозорец (това е напълно работещ):

И най-накрая - основната линия. Тя е много проста. Всяка итерация на цикъла проверява съобщенията за кандидатстване опашка. Ако има съобщение, то се изтегля от опашката в опашката на съобщенията. След това, в течение е призив процедурата за прозорец, за да бъде обработена, взети от опашката на съобщенията.

Тук, по принцип, е всичко за днес. Вече е ясно, че една програма е много по-сложна програма WinAPI под DOS. Както написах по-горе, в следващия урок ще разгледаме програмата код вървят.

Като упражнение, да създадете нов проект. В прозореца New Project (нов проект), изберете шаблон (по образец) - Win32Project (досега ние избрахме Win32 Console Application). В един от тези прозорци не слагайте Празна кутия на проекта (празен проект) и IDE генерира детайл програма.

Ако се вгледате внимателно в imya_proekta.cpp файл код, ще намерите всички неща, които обсъдихме: структура променлива от MSG, попълване WNDCLASS структура, създаване на функция прозорец на CreateWindow, основната програма линия. Освен това, файлът дефинира функция WndProc. В него има обработка на няколко съобщения в клоновете преминат: WM_COMMAND, WM_PAINT, WM_DESTROY. Намерете всичко във файла.

Освен, че ние прегледахме, програмата съдържа много повече код. В следващия брой ще разгледаме кода на програмата, която ще се намалят всички ненужни. Това ще бъде много по-лесно и по-лесно да се разбере какво генерира IDE.

ЕВРОВОК, заглавието на ЕВРОВОК (хедър) --- е информация, описваща нещо.
и т.н., и тази структура е WNDCLASS WAVEHDR, нещо, което в началото на BMP файлове и о, информация за вас на Microsoft и Google ..

db, както следва:
ч - номер, дръжката (на дръжката).

Надявам се, че сега няма да има объркване между идентификационен номер (с дръжката) и данни (ЕВРОВОК)?

Последни от дъската

Громова Анастасия → Автомати за реални пари
По-голямата част принадлежи на игрални автомати с резерва! Предполага се, че всички тези глупости, господин спечели там.

Громова Анастасия → Лицензиран онлайн казино
По-голямата част принадлежи на игрални автомати с резерва! Предполага се, че всички тези глупости, господин спечели там.

Громова Анастасия → Volcano казино пари реално ли е?
По-голямата част принадлежи на игрални автомати с резерва! Предполага се, че всички тези глупости, господин спечели там.

Громова Анастасия → Това е най-щастливият ми!
По-голямата част принадлежи на игрални автомати с резерва! Предполага се, че всички тези глупости, господин спечели там.

Edvard007 → анонимност онлайн от професионалисти | достъпни цени
Уважаеми потребители. Нашата VPN клиент за версия 1.6. Ние сме с нов дизайн и подобрена Def.

WapCash → Wap.cash - най-доброто решение за осигуряване на приходи от мобилния трафик
Добър ден, приятели! Всички знаем, че за ситуацията на пазара, особено на базата на светло.

Нашите приятели