Learn More be.holidayswatches.com.Fine i.travelhublot.com.well-known https://by.businessbellross.com.look at this now https://a.travelfranckmuller.com.you can check here https://as.divorcewatches.com/.click site at.domainswatches.com.his response https://ad.richardmillealll.com.provide https://be.hpatekphilippe.com/.Continue Reading https://at.furniturewatches.com.Find Out More be.showfranckmuller.com.Discover More a.hardwarewatches.com.go to my site https://ad.pussywatches.com/.Visit This Link https://be.computerbellross.com/.For details about https://by.taxeswatches.com/.get more https://a.financialwatches.com.that site https://be.divorcewatches.com.have a peek here https://as.restaurantwatches.com/.Buy now https://do.businessbreitling.com.see this here https://am.auctionswatches.com/.With Fast Shipping a.businesstagheuer.com.Under $20 https://at.musictagheuer.com.Swiss https://ad.apatekphilippe.com.see page be.telecomwatches.com.click here to read https://ad.computerhublot.com/.best choice be.vacationwatches.com.article be.hpatekphilippe.com.65% off https://ad.constructionwatches.com.find https://at.sexbellross.com/.navigate to these guys https://am.hpatekphilippe.com/.i loved this by.personalinjurywatches.com.image source https://ah.3gomegawatches.com.More about the author https://a.inomegawatches.com.discover this info here by.apatekphilippe.com.try here https://do.healthfranckmuller.com.visit this website ad.casinoswatches.com.click this link now https://at.computerhublot.com/.go to website at.fpatekphilippe.com.75% off ah.furniturewatches.com.click this site https://am.cardswatches.com.read review at.flowerswatches.com.go to this website https://i.showhublot.com.my latest blog post https://ad.hkomegawatches.com.click to find out more at.loanshublot.com.browse around this website https://at.jpatekphilippe.com.More Bonuses https://a.cardswatches.com.official site ad.hospitalwatches.com.read here https://am.deliverywatches.com/.investigate this site https://do.3gomegawatches.com.look at here am.itomegawatches.com.Under $69 https://am.informationwatches.com.go now https://at.businessbreitling.com/.Free shipping https://at.loanstagheuer.com.men's https://ah.careerwatches.com/.useful link by.internetbreitling.com.More Info i.caomegawatches.com.moved here https://ah.sextagheuer.com/.read more https://i.401kwatches.com.additional reading ad.sexhublot.com.favorite https://a.attorneywatches.com.visit site https://be.lawyerswatches.com.you could try this out do.hkomegawatches.com.her comment is here be.loansfranckmuller.com.Visit Your URL https://ah.sexhublot.com.take a look at the site here ah.cnomegawatches.com.here you can find the best https://do.businessbellross.com.Ladies https://am.travelbellross.com/.why not try here by.hotelswatches.com.you can look here https://am.personalinjurywatches.com/.High Quality https://at.cookingwatches.com.find more https://i.drugstorewatches.com/.visit the site be.itomegawatches.com.check over here https://ad.toyswatches.com/.why not check here https://am.bankruptcywatches.com.35% off https://ad.gpatekphilippe.com.good https://do.genomewatches.com/.content https://am.businessbellross.com.check here https://ad.businesstagheuer.com/.great https://i.inomegawatches.com/.see this ad.newsfranckmuller.com.A wonderful gift for a good man is luxury by.musictagheuer.com.For Sale Online https://a.drugstorewatches.com.anonymous https://be.mapwatches.com.great site am.biotechwatches.com.description a.directorywatches.com.Lady https://i.hockeywatches.com/.On Sale do.computerbreitling.com.Buy now best am.mapwatches.com.webpage https://i.careerwatches.com/.check am.hkomegawatches.com.sell i.educationwatches.com.Full Report https://at.hardwarewatches.com/.mens https://by.realtywatches.com.Related Site ah.computerhublot.com.Get More Info a.pizzawatches.com.you can find out more https://a.showtagheuer.com.visit this site https://am.cruisewatches.com/.Different Manufacturers https://am.cruisewatches.com.check my reference be.moneyhublot.com.blog here am.richardmilleairbus.com.find the best do.informationwatches.com.have a peek at this website https://by.loansfranckmuller.com/.try this web-site https://at.biotechwatches.com.Top Quality https://ad.internetbreitling.com.index https://i.caomegawatches.com/.browse around this web-site at.moneyfranckmuller.com.learn the facts here now at.pussywatches.com.visit this site right here https://a.holidayswatches.com.page a.jpatekphilippe.com.he has a good point https://a.musictagheuer.com/.check out this site https://am.apatekphilippe.com.Best place to buy https://am.showfranckmuller.com/.see here now https://a.telecomwatches.com/.linked here ad.apatekphilippe.com.55% off https://ah.computerbellross.com/.cheap price https://by.cdomegawatches.com.40% off https://do.loansfranckmuller.com.Clicking Here https://be.dogswatches.com/.why not look here by.ipatekphilippe.com.look at this website https://am.dpatekphilippe.com/.find out here now https://ad.electronicswatches.com.find more info ad.audiowatches.com.view it https://am.newstagheuer.com/.Web Site at.deliverywatches.com.70% off https://am.lawyerswatches.com.sites https://i.travelbreitling.com.Click Here https://ah.webbreitling.com/.next page https://a.hotelswatches.com/.pop over here be.genomewatches.com.On The Official Website https://a.itomegawatches.com/.With Best Cheap Price as.petswatches.com.Up To 50% Off https://at.bpatekphilippe.com.the original source ah.newsbreitling.com.click over here https://as.pizzawatches.com.Read More Here a.businessbreitling.com.her explanation be.businesshublot.com.To get more information about i.pussywatches.com.factory direct https://i.sportstagheuer.com/.purchase https://i.furniturewatches.com.have a peek at these guys https://ah.banktagheuer.com/.Womens https://be.webbreitling.com.Wiht 90% Discount https://do.ipatekphilippe.com.low prices https://i.travelbreitling.com/.To learn more about as.healthfranckmuller.com.Read Full Report ad.401kwatches.com.Source https://a.musichublot.com.my site https://am.businessbellross.com/.fashion ah.webbreitling.com.read what he said be.cpatekphilippe.com.click here now ah.caomegawatches.com.useful source by.businessbreitling.com.dig this https://be.taxeswatches.com/.original site https://be.computertagheuer.com.here are the findings https://by.bankruptcywatches.com/.article source https://do.moneybreitling.com/.Wiht 70% Discount https://be.moneyhublot.com.the best price https://do.auctionswatches.com.Read Full Article at.holidayswatches.com.important link https://ad.healthbreitling.com/.find out here by.hkomegawatches.com.Under $100 a.healthbellross.com.continue reading this i.goomegawatches.com.i was reading this https://as.furniturewatches.com/.offer https://am.businesstagheuer.com/.he said a.holidayswatches.com.check my source https://by.petswatches.com.blog link https://at.bankruptcywatches.com/.visit our website https://am.sexbellross.com/.view website https://a.electronicswatches.com.see this page i.businessbreitling.com.Top brand as.realtywatches.com.you could look here https://am.pizzawatches.com.reference https://do.musicfranckmuller.com.the hottest ad.employmentwatches.com.click this link here now https://i.richardmilleaaa.com/.you can try here do.computerhublot.com.this link https://as.realtywatches.com/.Luxury https://ad.newsfranckmuller.com.visit their website at.employmentwatches.com.official source https://a.musicbellross.com/.Wiht 60% Discount https://ad.internetbreitling.com/.Homepage a.mutualfundswatches.com.go to my blog https://a.hospitalwatches.com/.my company https://am.3domegawatches.com/.browse around this site https://do.newshublot.com/.click this ah.richardmilleaaa.com.click over here now https://am.webbreitling.com.Top Seller https://ad.hockeywatches.com.you could try here https://be.businessfranckmuller.com.more helpful hints https://be.cookingwatches.com.check out here https://do.realestatetagheuer.com/.Women's https://do.apatekphilippe.com.more i.telecomwatches.com.Buy https://do.computerhublot.com.internet https://ah.computerfranckmuller.com/.here https://ad.inomegawatches.com/.cheapest a.bankruptcywatches.com.over at this website https://do.moneybellross.com.like this https://be.moneybreitling.com/.my blog https://be.ipatekphilippe.com/.top article https://by.sexfranckmuller.com/.home https://a.cruisewatches.com.best quality https://by.moneyfranckmuller.com/.look these up https://be.richardmilleairbus.com/.click here for more https://by.sportstagheuer.com/.anchor https://i.travelfranckmuller.com/.redirected here https://do.careerwatches.com/.Online Store https://as.loansbellross.com.For Women And Men https://ah.testwatches.com/.afford https://a.biotechnologywatches.com/.hop over to this website https://do.employmentwatches.com.website here am.petswatches.com.have a peek at this site https://a.directorywatches.com/.great post to read https://ad.testwatches.com.For Sale as.fpatekphilippe.com.additional hints https://at.accountingwatches.com/.Sale https://at.taxeswatches.com/.To learn more, go to website: https://as.moneytagheuer.com/.read this https://be.attorneywatches.com/.site link https://am.ipatekphilippe.com/.click here to investigate i.newshublot.com.web link https://am.musicfranckmuller.com.visit homepage https://a.gpatekphilippe.com/.their website https://i.moneyhublot.com.site here https://ad.traveltagheuer.com.click https://be.newsfranckmuller.com.find more information https://a.engineeringwatches.com.supply https://be.dpatekphilippe.com/.Wiht Big Discount https://ah.3gomegawatches.com/.look at here now ah.healthbreitling.com.On Our Website https://a.showfranckmuller.com/.Extra resources https://at.electronicswatches.com/.additional resources ad.epatekphilippe.com.try this out https://at.musichublot.com/.try these out https://ah.testwatches.com.go https://as.cookingwatches.com/.link https://ah.moneyhublot.com.High-quality do.moneyhublot.com.Learn More Here ad.directorywatches.com.30% off https://by.attorneywatches.com.Discover More Here https://do.pharmacywatches.com/.navigate to this web-site https://ad.hpatekphilippe.com/.Fast Shipping https://am.gpatekphilippe.com.Recent Comments https://ah.toyswatches.com/.With Discount https://do.casinoswatches.com/.45% off https://be.webbreitling.com/.Wholesale as.sportstagheuer.com.useful content by.flowerswatches.com.click to read more am.lawyerswatches.com.With Free Shipping Worldwide at.auctionswatches.com.this content ah.sexhublot.com.visit this page https://be.cruisewatches.com.browse this site https://by.biblewatches.com.this website https://ah.sexfranckmuller.com.check this site out https://do.attorneywatches.com/.Continued https://i.cookingwatches.com/.useful reference https://a.healthhublot.com/.click here for info be.businessbreitling.com.New ah.cookingwatches.com.read this article i.dpatekphilippe.com.This Site https://by.realestatetagheuer.com.websites by.auctionswatches.com.official statement a.richardmilleairbus.com.this hyperlink do.biblewatches.com.look at these guys by.biblewatches.com.Hot Sales by.employmentwatches.com.imitation ad.auctionswatches.com.important site a.biotechwatches.com.Get the facts a.fpatekphilippe.com.costly and then again, the copies are of less expense. https://am.computerhublot.com/.80% off https://be.moneyfranckmuller.com.right here https://be.biotechnologywatches.com/.Bonuses https://a.internetbreitling.com/.view publisher site https://do.healthhublot.com.site web https://a.newsbreitling.com.click for source https://i.sexfranckmuller.com.my response https://be.newsbellross.com.Hot https://as.petswatches.com.straight from the source https://at.divorcewatches.com.best value https://at.moneybellross.com/.review https://ad.hardwarewatches.com.go to this web-site https://a.audiowatches.com.my website https://do.hostingwatches.com/.visit this web-site i.attorneywatches.com.website link https://by.hpatekphilippe.com.Up To 80% Off https://ad.accountingwatches.com.navigate here do.epatekphilippe.com.More details about webpage: as.hospitalwatches.com.weblink https://by.financialwatches.com/.look at this web-site at.sexbellross.com.professional https://am.businessfranckmuller.com.Our site https://i.sexbreitling.com.Fast Delivery https://a.constructionwatches.com/.inexpensive https://by.toyswatches.com/.site https://i.computerbellross.com/.go to the website ad.electronicswatches.com.special info https://am.apatekphilippe.com/.go to this site https://i.casinoswatches.com/.navigate to this website am.cpatekphilippe.com.Wiht 20% Discount https://ad.jpatekphilippe.com.Get More Information https://do.newsbellross.com.check this link right here now https://at.newsbreitling.com/.24 Hours Online https://i.mapwatches.com.her response ad.sexfranckmuller.com.get redirected here https://ah.cdomegawatches.com.With Fast Delivery at.ipatekphilippe.com.shop be.deliverywatches.com.click now ah.internetbreitling.com.important source https://a.cnomegawatches.com.next https://a.caomegawatches.com.see this website am.realtywatches.com.his comment is here https://do.biotechwatches.com.More information about https://do.businessfranckmuller.com.explanation https://be.newstagheuer.com/.Wiht 50% Discount be.casinoswatches.com.view it now https://ad.loansbellross.com.web a.informationwatches.com.finest materials with scrupulous attention to details. Find more here am.bankruptcywatches.com.you could try these out https://as.personalinjurywatches.com/.read the article https://at.realestatetagheuer.com/.Under $39 https://ah.loansfranckmuller.com/.company website https://do.mapwatches.com.see it here ad.mutualfundswatches.com.pop over to this website https://by.dpatekphilippe.com/.find out am.hardwarewatches.com.i thought about this ah.loansbellross.com.see this site as.showtagheuer.com.visit the website https://ah.moneybreitling.com/.try this website https://by.restaurantwatches.com/.why not try these out am.loansbellross.com.basics https://ad.goomegawatches.com.Going Here https://a.drugstorewatches.com/.click for more info at.showtagheuer.com.click resources https://do.personalinjurywatches.com.this page https://ad.casinoswatches.com/.check my blog https://ah.moneyhublot.com/.you could check here https://i.mutualfundswatches.com.Under $50 https://a.pizzawatches.com/.learn this here now https://at.moneyhublot.com/.look at more info https://i.showfranckmuller.com/.our website https://am.travelbreitling.com.her latest blog do.fpatekphilippe.com.Wiht 40% Discount https://by.constructionwatches.com/.Go Here https://at.holidayswatches.com/.60% off at.bpatekphilippe.com.look here https://a.sportstagheuer.com.official website https://do.careerwatches.com.helpful site https://be.directorywatches.com.Up To 70% Off do.computerbellross.com.Visit Website ah.jpatekphilippe.com.check this https://ad.sexfranckmuller.com.hop over to these guys a.webbreitling.com.click to investigate https://be.sexhublot.com.pop over to this web-site by.sexbreitling.com.discount price https://i.bankruptcywatches.com.this post https://as.richardmillealll.com.More info about am.3domegawatches.com.More hints at.dogswatches.com.Cheap https://be.richardmilleaaa.com/.news https://i.hkomegawatches.com.visit here https://i.accountingwatches.com/.Top https://be.informationwatches.com/.find out this here by.moneyfranckmuller.com.greatest https://be.internetbreitling.com/.Look At This be.moneybreitling.com.other ad.showfranckmuller.com.pop over to this site https://ad.financialwatches.com.90% off as.furniturewatches.com.click here to find out more https://ad.newshublot.com/.why not try this out at.vacationwatches.com.my link uhrenreplik.com.the newest https://at.webbreitling.com.this contact form i.dogswatches.com.Shop for https://ad.informationwatches.com.view i.webbreitling.com.useful site https://do.loanshublot.com/.use this link https://as.businesstagheuer.com.Home Page ad.3gomegawatches.com.visite site https://ad.realestatetagheuer.com/.recommended you read https://a.educationwatches.com/.you can try this out https://ad.itomegawatches.com.Up To 60% Off https://a.musicfranckmuller.com/.click this over here now do.furniturewatches.com.more information https://ah.itomegawatches.com.click to read https://i.computerfranckmuller.com/.read this post here at.musicbellross.com.read https://at.apatekphilippe.com.At Lowest Prices by.directorywatches.com.click for info at.travelhublot.com.navigate to this site i.employmentwatches.com.find this by.musicfranckmuller.com.a fantastic read https://do.epatekphilippe.com.advice https://as.moneyfranckmuller.com/.Perfect gift https://i.sexhublot.com.you can try these out https://do.divorcewatches.com/.hop over to here ah.musictagheuer.com.more tips here https://as.401kwatches.com/.Hot Sale https://ad.employmentwatches.com.clone at.financialwatches.com.click here for more info ad.richardmillealll.com.With Free Shipping https://at.testwatches.com.

Создание окна Windows

В основе системы Windows лежит понятие окна. Окно — это область экрана, которая связывает каждую запускаемую программу с пользователем и используется для управления работой этой программы. Все окна оформляются в одном стиле и ведут себя одинаково.

Каждое окно имеет рамку и заголовок. Рамка служит для определения рабочей области, а так же для изменения размеров окна. Заголовок содержит имя запущенной программы и ряд управляющих кнопок: свернуть, распахнуть на весь экран и закрыть и применяется для изменения местоположения окна на экране.

Рассмотрим как же создать простое приложение выводящее на экран окно в операционной системе Windows с использованием Win API на языке С++:

Как точка входа в программу в оконных приложениях Windows используется функция WinMain. Именно с вызова этой функции и начинает работать наша программа.

Прототип функции выглядит следующим образом:

1
2
3
4
5
6
7
int WINAPI WinMain
(
   HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   LPSTR lpCmdLine,
   int nShowCmd
)

Эту функцию вызывает операционная система при запуске приложения и передает в неё 4 параметра:

hInstance Дескриптор текущего экземпляра приложения. Так как Windows является многозадачной системой, то очевидно, что одна и та же программа может быть запущена несколько раз. Для того чтобы различать экземпляры программ, каждому экземпляру присваивается условный номер – хэндл (handle). Отмечу, так же, что в Win32 присваиваются хэндлы чему угодно – окну, меню, курсору, иконке и т.д.
hPrevInctance Указатель на предыдущий запущенный экземпляр. Всегда равен NULL. В Windows 3.1 hPrevInctance являлся хэндлом предыдущего экземпляра программы. Если запускается первый экземпляр программы, то параметр hPrevInctance был равен нулю. Этот параметр можно было использовать для того, чтобы не позволить системе запускать более одного экземпляра программы. В Win32 hPrevInctance оставлен исключительно для совместимости с предыдущими версиями Windows.
lpCmdLine Указатель на командную строку запускаемой программы. Представляет собой указатель на строку параметров, которые были указаны после имени запускаемой программы. При необходимости программа может проанализировать этот аргумент и выполнить некоторые действия.
nCmdShow Способ визуализации окна. Определяет, в каком виде создаваемое окно будет появляться на экране. Окно может появиться развернутым на весь экран, свернутым в панель задач, иметь произвольный размер на рабочем столе и другие характеристики. В Win API определяется 11 возможных значений этого параметра. Их идентификаторы начинаются с SW (Show Window).

Возможные значения параметра nCmdShow приведены ниже:

SW_HIDE Скрывает окно и активизирует другое окно.
SW_MAXIMIZE Распахивает указанное окно на весь экран.
SW_MINIMIZE Минимизирует указанное окно и активизирует следующее окно верхнего уровня Z буфера.
SW_RESTORE Активизирует и отображает окно. Если окно минимизировано или развернуто, система восстанавливает его в исходное положение и размер. Приложение должно указать этот флаг при восстановлении свернутого окна.
SW_SHOW Активирует окно и выводит на экран это в его текущем размере и позиции.
SW_SHOWMAXIMIZED Активизирует окно и отображает его как развернутое окно.
SW_SHOWMINIMIZED Активизирует окно и отображает его как свернутое окно.
SW_SHOWMINNOACTIVE Отображает окно как свернутое окно. Это значение аналогично SW_SHOWMINIMIZED, за исключением того, что окно не активизируется.
SW_SHOWNA Отображает окно в его текущем размере и позиции. Это значение аналогично SW_SHOW, за исключением того, что окно не активизируется.
SW_SHOWNOACTIVATE Отображает окно в его последнем размер и положение. Это значение аналогично SW_SHOWNORMAL, за исключением того, что окно не активируется.
SW_SHOWNORMAL Активизирует и отображает окно. Если окно минимизировано или развернуто, система восстанавливает его в исходное положение и размер. Приложение должно указать этот флаг при показе окна в первый раз.

Указатель типа int предшествующий названию функции говорит о том, что функция должна вернуть вызывающей её системе целое значение, а характеристика WINAPI – определяет порядок передачи параметров при вызове процедуры. Наименование характеристик говорит само за себя – Windows Application Programming Interface – применяются соглашения о передаче параметров, принятых в системах Windows.

Следующим шагом нужно создать, заполнить и зарегистрировать класс окна. Класс окна представляет собой структуру с именем WNDCLASS.

Прототип структуры WNDCLASS выглядит следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct {
   UINT style;
   WNDPROC lpfnWndProc;
   int cbClsExtra;
   int cbWndExtra;
   HINSTANCE hInstance;
   HICON hIcon;
   HCURSOR hCursor;
   HBRUSH hbrBackground;
   LPCTSTR lpszMenuName;
   LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
style Стиль окна определяется комбинацией нескольких предопределенных констант. Довольно часто он задается равным нулю, что означает «стиль по умолчанию»
lpfnWndProc Указатель на оконную процедуру.
cbClsExtra Определяет количество дополнительных байт резервируемых структуре класса.
cbWndExtra Определяет количество дополнительных байт резервируемых структуре окна.
hInstance Дескриптор экземпляра, который содержит оконную процедуру для класса.
hIcon Дескриптор иконки. Этот элемент должен содержать дескриптор ресурса иконки. Если этот элемент имеет значение NULL, система устанавливает значок по умолчанию.
hCursor Дескриптор курсора. Этот элемент должен содержать дескриптор ресурса курсора. Если этот элемент имеет значение NULL, приложение должно явно установить формы курсора при перемещении мыши в окне приложения.
hbrBackground Дескриптор кисти фона. Этот элемент может быть дескриптором кисти, которая будет использоваться для окраски фона, или это может быть значение цвета.
lpszMenuName Указатель на имя ресурса меню. Если этот элемент имеет значение NULL, окна этого класса не имеют меню.
lpszClassName Указатель имя только что созданного нами класса окна. Максимальная длина lpszClassName 256.

Регистрация класса окна осуществляется функцией RegisterClass прототип которой выглядит:

1
2
3
ATOM RegisterClass(
CONST WNDCLASS *lpWndClass
);

В качестве параметров функция принимает указатель на структуру WNDCLASS созданную нами ранее.

И наконец, функция создания окна — CreteWindow. Вот прототип этой функции:

1
2
3
4
5
6
7
8
9
10
11
12
13
HWND CreateWindow (
   LPCTSTR lpClassName,
   LPCTSTR lpWindowName,
   DWORD dwStyle,
   int x,
   int y,
   int nWidth,
   int nHeight,
   HWND hWndParent,
   HMENU hMenu,
   HINSTANCE hInstance,
   LPVOID lpParam
);
lpClassName Указатель на имя класса окна.
lpWindowName Указатель на имя окна. При использовании CreateWindow для создания элементов управления, таких как кнопки, флажки и статические элементы управления, в lpWindowName указывается идентификатор элемента.
dwStyle Определяет стиль окна. Этот параметр может быть комбинацией стилей окна.
x Задает начальное горизонтальное положение окна.
у Задает начальное вертикальное положение окна.
nWidth Определяет ширину окна в пикселях.
nHeight Определяет высоту окна в пикселях.
hWndParent Дескриптор родителя(владельца) создаваемого окна.
hMenu Дескриптор меню.
hInstance Хэндл экземпляра окна.
lpParam Мы пока использовать не будем.

При успешном выполнении функция возвращает дескриптор созданного окна, при ошибке NULL.

Для того чтобы корректно отобразить окно на экране, следует выполнить ещё две функции ShowWindow и UpdateWindow.

1
2
3
4
BOOL ShowWindow(
   HWND hWnd,
   int nCmdShow
)

Функция ShowWindow отображает окно на экране. Первый параметр – дискриптор окна, второй – режим отображения. В качестве этого параметра обычно используют параметр nWinMode функции WinMain.

1
2
3
BOOL UpdateWindow(
   HWND hWnd
)

Вызов данной функции приводит к немедленной перерисовке окна и посылке функции окна сообщения WM_PAINT.

Описанных выше действий вполне достаточно для создания простейшего приложения Windows выводящего на экран пустое окно, но наше приложение должно как то взаимодействовать с пользователем. Именно для взаимодействия с пользователем и существует цикл обработки сообщений.

Центральным понятием программирования в среде Windows является сообщение. Система посылает сообщение приложению, а то, в свою очередь, должно правильно отреагировать на него. Получателями сообщений являются функции окон приложения, на программирование которых и уходит большая часть времени при разработке API-приложений.

Цикл обработки сообщений присутствует во всех приложениях Windows. Правда, не всегда этот цикл представлен явно в программе.
Выглядит он следующим образом:

1
2
3
4
5
while (GetMessage(&msg, NULL, 0, 0))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

В цикле обработки сообщений присутствует три функции. Эти функции есть там всегда, но кроме них в цикле могут быть и другие. Функция GetMessage выбирает из очереди сообщений приложения очередное приложение. Вместо этой функции используют так же функции PostMessage и PeekMessage.

Функция TransleteMessage преобразует сообщения WM_KEYDOWN и WM_KEYUP в WM_CHAR. Функция DispatchMessage просто переправляет сообщение оконной процедуре.

Во всех трех функциях присутствует указатель на строку MSG. Разберём её:

1
2
3
4
5
6
7
8
9
typedef struct tag MSG
{
   HWND hwnd;
   UINT message;
   WPARAM wParam;
   LPARAM lParam;
   DWORD time;
   POINT pt;
}MSG;
hwnd Дескриптор окна.
message код сообщения.
wParam дополнительный параметр.
lParam дополнительный параметр.
time время посылки сообщения.
pt положение курсора мыши.

Оконная процедура — еще один компонент, отвечающий за обработку сообщений окна. Эта функция вызывается системой и имеет четыре параметра, совпадающих с первыми четырьмя членами структуры MSG. Искусство API-программирования заключается в основном в написании оконных функций.

Вот прототип оконной функции:

1
2
3
4
5
6
7
8
9
LRESULT CALLBACK WndProc(
   HWND hWnd,
   UINT message,
   WPARAM wParam,
   LPARAM lParam
)
{
   ...
}

Далее я покажу код приложения создающего простое окно Windows, которое обладает основными элементами: заголовок, кнопки минимизации, распахивания на весь экран и закрытия окна, а так же свойствами: перемещение по экрану, изменение ширины и высоты, завершения работы приложения при нажатии на кнопку завершения приложения (крестик).

Для удобства код был разделен на две части, в первой из которых описан код создания окна (CreateWindow.cpp), а во второй — код оконной функции (WinProc.h), который подключается к файлу CreateWindow.cpp при помощи инструкции #include.

WinProc.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT PS;
	switch(message)
	{
	case WM_CREATE:
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_PAINT:
		BeginPaint(hWnd, &PS);
		EndPaint(hWnd, &PS);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

CreateWindow.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <Windows.h>
#include "WinProc.h"
 
//Точка входа в программу
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
	//Создаем класс окна
	WNDCLASS WindowClass;
 
	//Заполняем структуру 
	WindowClass.style		= 0;
	WindowClass.lpfnWndProc		= (WNDPROC)WndProc;
	WindowClass.cbClsExtra		= 0;
	WindowClass.cbWndExtra		= 0;
	WindowClass.hInstance		= hInstance;
	WindowClass.hIcon		= LoadIcon(hInstance,
					  (LPCTSTR)IDI_APPLICATION);
	WindowClass.hCursor		= LoadCursor(NULL, IDC_ARROW);
	WindowClass.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	WindowClass.lpszMenuName	= 0;
	WindowClass.lpszClassName	= TEXT("Class");
 
	//Зарегистируем класс окна
	RegisterClass(&WindowClass);
 
	//Создаем переменную, в которой поместим идентификатор окна
	HWND hWnd;
 
	hWnd = CreateWindow(TEXT("Class"), TEXT("Заголовок окна"),
	       WS_OVERLAPPEDWINDOW, 0, 0, 500, 300, NULL, NULL, hInstance, NULL); 
 
	//показать окно
	ShowWindow(hWnd, nCmdShow);
 
	//обновить содержимое окна
	UpdateWindow(hWnd);
 
	//Создадим переменную для храненния сообщений
	MSG msg;
 
	//Создадим цикл обработки сообщений
	while(GetMessage(&msg, NULL,0 ,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}

Проект приложения для VS 2010 ( Скачали: 109 чел. ) 

  1. Приветствую! не могу разобраться. Знаю PHP, решил подружиться с WinAPI. Создал в VS 2012 проект Win32. А дальше пропасть, днище… Создаю отдельный файл main.cpp, например, дальше, я так понимаю нужно в нём за инкудить #include и что дальше? Напишите самый примитивный код, который создаёт окно, даёт ему название, а то сложно сразу съесть тонны неясного… Благодарю.

    P.S. По WP вопросы будут-обращайтесь на блог.

  2. http://windowsapi.ru/files/CreateWindow.zip
    Это проект в котором как раз и создается окно.

  3. После нажатия отладки (F5) Пишет вот это! Почему?

    1>—— Построение начато: проект: CreateWindow, Конфигурация: Debug Win32 ——
    1>LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
    ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>