Съобщения на прозорци и функции на прозорци

Прозорецът се идентифицира чрез неговияманипулатор на прозореца.Този манипулатор (променлива от тип HWND) уникално идентифицира всеки прозорец в системата. Windows организира своите прозорци в йерархична структура:

- всеки прозорец има родител, коренът на дървото на всички прозорци е прозорецът на работния плот, създаден от Windows при зареждане;

- За всички прозорци от най-високо ниво (за главни прозорци на приложения и други припокриващи се и изскачащи прозорци на приложения), родителският прозорец е работният плот.

Родителят на дъщерен прозорец е прозорец от най-високо ниво или друг дъщерен прозорец по-високо в йерархията.

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

Прозорецът, като правило, реагира на много съобщения. Помислете занай-често обработваните съобщения:

- WMCREATE се изпраща до прозореца, преди прозорецът да стане видим, когато съобщението бъде получено, приложението може да инициализира необходимите данни;

- WMDESTROY се изпраща към прозорец, който вече е премахнат от екрана и трябва да бъде унищожен;

- WMCLOSE показва, че прозорецът трябва да бъде затворен. Приложението може, когато го обработва, например да покаже диалогов прозорец за потвърждение за затваряне на прозореца;

- WMQUIT съобщение, което изисква приложението да бъде прекратено;

- WMQUERYENDSESSION уведомява приложението, че Windows възнамерява да приключисесия. Приложение МОЖЕ да върне FALSE в отговор на това съобщение, предотвратявайки изключването на Windows. След обработка на съобщението WMQUERYENDSESSION, Windows изпраща съобщение WMENDSESSION до всички приложения с резултатите от тази обработка;

- WMENDSESSION се изпраща към приложенията след обработка на съобщението WMQUERYENDSESSION. Той определя дали Windows трябва да се изключи или се забавя. Когато посочите изключване, сесията на Windows може да приключи по всяко време, след като всички приложения са обработили съобщението WMENDSESSION. Следователно е важно приложенията да изпълняват всички задачи, за да осигурят безопасно изключване;

- WMACTIVATE показва, че прозорецът от най-високо ниво ще бъде активиран или деактивиран. Съобщението първо се изпраща до прозореца, който трябва да бъде деактивиран, а след това до прозореца, който трябва да бъде разрешен;

- WMSHOWWINDOW показва, че прозорецът трябва да бъде скрит или показан;

- WMENABLE се изпраща до прозорец, когато стане наличен или недостъпен. Недостъпен прозорец не може да приеме въвеждане с мишката или клавиатурата;

- WMMOVE показва, че местоположението на прозореца е променено;

- WMSIZE показва, че прозорецът е преоразмерен;

- WMSETFOCUS показва, че прозорецът е получил фокус от клавиатурата;

- WMKILLFOCUS указва, че прозорецът трябва да загуби фокуса на клавиатурата;

Помислете за функциите, които позволяват на приложението да изследва йерархията на прозорците, да намира, премества, променя режима на показване, променя външния вид на прозореца:

AnimateWindowви дава възможност да създавате специални ефекти при показване или скриване на прозорци. Има четири вида анимация: филм, слайд, свиване или разширяване и плавен поток;

CloseWindowзатваря (но не унищожава) посочения прозорец;

FindWindowсе използва за намиране на прозорец от най-високо ниво по името на класа на прозореца или заглавието на прозореца;

FlashWindowе проектиран да създава прозорец с мигащо заглавие, използвано за привличане на вниманието към прозореца;

FlashWindowExподобрена версия на FlashWindow;

GetClientRectвръща координатите на клиентската област на прозореца;

GetParentвръща манипулатор към родителския прозорец за посочения;

GetDesktopWindowвръща манипулатор към прозореца на работния плот на Windows;

GetTitleBarInfoвръща информация за заглавната лента;

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

GetWindowPlacementвръща местоположението на прозореца;

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

IsChildпроверява дали прозорецът е дъщерен прозорец или дъщерен прозорец на посочения родителски прозорец;

IsWindowопределя дали дадения манипулатор съответства на съществуващ прозорец;

IsWindowVisibleвръща информация за състоянието на посочения прозорец;

MoveWindowпроменя позицията и размера на прозореца. За прозорец от най-високо ниво местоположението е спрямо горния ляв ъгъл на екрана. За дъщерен прозорец местоположението е спрямо горния ляв ъгъл на клиентската област на родителския прозорец;

Openlconвъзстановяваминимизиран прозорец;

SetWindowPlacementнастройва да показва състояние и възстановява, минимизира и увеличава прозореца;

SetWindowTextкопира текста от заглавната лента на прозореца (ако има такава) в буфера. Ако прозорецът е контрола, текстът на контролата се копира;

ShowWindowзадава състоянието на прозореца за показване;WindowFromPointизвлича манипулатора на прозореца, който съдържа дадената точка.

Източник: Сучкова, Л.И. Win32 API: Основи на програмирането: Урок / L.I. Сучков; АлтГТУ им. AI. Ползунов. -Барнаул, AltSTU, 2010. 138 с., ил.