WM_?

16 отговора 1041 прегледа
#1

WM_?

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

Отговор
в отговор на m #2

Баси

Какво ли си представят хората под "главен" прозорец?



Si Vis Pacem, Para Bellum
Отговор
в отговор на m #3

Re: WM_?

takova jivotno nema

Отговор
в отговор на MиГ #4

Re: Баси

Po princip wse neshto si predstawiat...
AfxGetMainWnd( ) moje bi ako si fen na MFC...
ako znaesh kak da razberesh dali niakoi prozorec e pokrit izcialo, kaji


Отговор
в отговор на m #5

Re: WM_?

Podoziram, che shte trqbva da polzvash EnumChildWindows i GetWindowRect i da si ischislish pokritata chast samostoqtelno.

Отговор
в отговор на Architect #6

Re: WM_?

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

Отговор
в отговор на m #7

Re: WM_?

хм. не се сещам за какво може да ти е необходимо това..

все пак - можеш да си поиграш с Update, Clip i Visible region-ите на прозорците..

Отговор
в отговор на m #8

Re: WM_?

Tochno taka - eto ti poveche podrobnosti:
Kato iterirash po prozorcite v posoka na tehniq Z-order i dobavqsh tehniq window rect v edin region, kato otchitash samo tezi prozorci, koito sa nad tvoq.
Sled tova vadish regiona ot window rect-a na tvoq prozorec i proverqvash, dali regiona ne ti e prazen.

Vse pak za kakvo ti e takava funkcionalnost?

Отговор
в отговор на Architect #9

Re: WM_?

Ili pak mozhe da prilozhish RectVisible s razmeri na prozoreca varhu HDC-to na prozoreca - tova trqbva da e ekvivalentno na gornata procedura.

Отговор
в отговор на Architect #10

Re: WM_?

Ето эа какво ми е .
Не прехващам съобщенията само чреэ GetMessage , а и чреэ PeekMessage и
иэполэвам флаг эа активност на приложението bool ready=false; който трябва
да бъде установяван в лъжа при настъпване на съответни събития.
-минимиэиране
-покриване на целия проэорец от друг
-и т.н.

Отговор
в отговор на m #11

Re: WM_?

Obiknoveno v takiva sluchai se obrabotva WM_ACTIVATEAPP.
Ima li neshto specialno v tvoeto prilozhenie, koeto da pravi neprilozhimo tova saobshtenie?

Отговор
в отговор на Architect #12

Re: WM_?

Поради големия интерес от твоя страна всичко ще ти бъде обяснено.
GetMessage чака за съобщение а PeekMessage само проверява и двете
функции се използват но алтернативно.Тоест ако ready=false се използва
GetMessage а ако е true се използва PeekMessage.Очевидно така по-добре
се използва процесорното време отпуснато за съответния процес.Но кога
ready се установява в false?Когато прозореца се минимизира (най важния
случай) в противен случай WINDOWS става 'почти" неуправляем.И когато
прозореца бъде изцяло закрит.
Въпрс:
Какво е все пак това капризно приложение?!
Отговор:
Това е DirectX приложение нуждаещо се от цялото внимание на MS WIN-
DOWS.

Отговор
в отговор на m #13

Re: WM_?

V takav sluchai periodichnata proverka na clipping regiona po nqkoi ot goreposochenite metodi trqbva da svarshi rabota.

Отговор
в отговор на m #14

Re: WM_?

Eto ti nai kratkia otgovor-Izpolzvai prozorez na coords 0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN) i izpolzvai WM_PAINT v Proc-a na novia prozorec.
chao!!!.
Ako imash mnenia pishina na Mihail12@Dir.bg

Отговор
в отговор на m #15

Re: WM_?

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


bool IsWindowOverlapped(HWND Handle)
{
RECT TR, HR;
HWND Top = GetForegroundWindow();
if (Top != Handle)
{
if (GetWindowRect(Top, &TR) && GetWindowRect(Handle, &HR))
return !memcmp(&TR, &HR, sizeof(RECT));
}
return false;
}

Предаваш и HWND на твоя прозорец и ако е покрит точно получаваш true.
или следващата функция, за да провериш 100% покритие но различен размер.

bool IsWindowOverlapped_2(HWND Handle)
{
RECT TR, HR;
HWND Top = GetForegroundWindow();
if (Top != Handle)
{
if (GetWindowRect(Top, &TR) && GetWindowRect(Handle, &HR))
return (TR.left <= HR.left) &&
(TR.right >= HR.right) &&
(TR.top <= HR.top) &&
(TR.bottom >= HR.bottom);
}
return false;
}



Отговор
в отговор на GG #16

Re: WM_?

w naj skoro wreme 6te probvam.

Отговор
в отговор на m #17

Re: WM_?

Znachi pyrwo ako si zabelqzal na igrite kogato e maximiziran prozoreca i se natisne alt+tab prozoreca ne gubi samo fokus no se i minimizira. Oswen towa kogato prozorecyt ti ne e aktiwen a nad nego ima drug toi ne poluchawa WM_ taka che onezi funkcii koito ti gi dade GG nqma kak da gi ostawish wyw funkciq za obrabotka na syobshteniq ( oswen WM_TIMER) . Ako igrata ti raboti w "restore" window po dobre e da startirash 2-ra nishka koqto da prowerqwa na zadaden ot tebe interwal dali prozoreyt ti ne e pokrit izcqlo ot nqkoi drug.

Отговор