WM_?
16 отговора
1041 прегледа
WM_?
Какво съобщение да прехвана за да разбера,че друг прозорец изцяло е покрил главния прозорец на моето приложение.
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

AfxGetMainWnd( ) moje bi ako si fen na MFC...
ako znaesh kak da razberesh dali niakoi prozorec e pokrit izcialo, kaji
Re: WM_?
Podoziram, che shte trqbva da polzvash EnumChildWindows i GetWindowRect i da si ischislish pokritata chast samostoqtelno.
Re: WM_?
GetWindowRect дава размера на прозореца въобще а не покритата или не
покрита част.Все пак благодаря за отговора.
покрита част.Все пак благодаря за отговора.
Re: WM_?
хм. не се сещам за какво може да ти е необходимо това..
все пак - можеш да си поиграш с Update, Clip i Visible region-ите на прозорците..
все пак - можеш да си поиграш с Update, Clip i Visible region-ите на прозорците..
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?
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?
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.
Re: WM_?
Ето эа какво ми е .
Не прехващам съобщенията само чреэ GetMessage , а и чреэ PeekMessage и
иэполэвам флаг эа активност на приложението bool ready=false; който трябва
да бъде установяван в лъжа при настъпване на съответни събития.
-минимиэиране
-покриване на целия проэорец от друг
-и т.н.
Не прехващам съобщенията само чреэ GetMessage , а и чреэ PeekMessage и
иэполэвам флаг эа активност на приложението bool ready=false; който трябва
да бъде установяван в лъжа при настъпване на съответни събития.
-минимиэиране
-покриване на целия проэорец от друг
-и т.н.
Re: WM_?
Obiknoveno v takiva sluchai se obrabotva WM_ACTIVATEAPP.
Ima li neshto specialno v tvoeto prilozhenie, koeto da pravi neprilozhimo tova saobshtenie?
Ima li neshto specialno v tvoeto prilozhenie, koeto da pravi neprilozhimo tova saobshtenie?
Re: WM_?
Поради големия интерес от твоя страна всичко ще ти бъде обяснено.
GetMessage чака за съобщение а PeekMessage само проверява и двете
функции се използват но алтернативно.Тоест ако ready=false се използва
GetMessage а ако е true се използва PeekMessage.Очевидно така по-добре
се използва процесорното време отпуснато за съответния процес.Но кога
ready се установява в false?Когато прозореца се минимизира (най важния
случай) в противен случай WINDOWS става 'почти" неуправляем.И когато
прозореца бъде изцяло закрит.
Въпрс:
Какво е все пак това капризно приложение?!
Отговор:
Това е DirectX приложение нуждаещо се от цялото внимание на MS WIN-
DOWS.
GetMessage чака за съобщение а PeekMessage само проверява и двете
функции се използват но алтернативно.Тоест ако ready=false се използва
GetMessage а ако е true се използва PeekMessage.Очевидно така по-добре
се използва процесорното време отпуснато за съответния процес.Но кога
ready се установява в false?Когато прозореца се минимизира (най важния
случай) в противен случай WINDOWS става 'почти" неуправляем.И когато
прозореца бъде изцяло закрит.
Въпрс:
Какво е все пак това капризно приложение?!
Отговор:
Това е DirectX приложение нуждаещо се от цялото внимание на MS WIN-
DOWS.
Re: WM_?
V takav sluchai periodichnata proverka na clipping regiona po nqkoi ot goreposochenite metodi trqbva da svarshi rabota.
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
chao!!!.
Ako imash mnenia pishina na Mihail12@Dir.bg
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;
}

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;
}
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.