1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Added invalidation of non-client area on WM_ACTIVATE

This commit is contained in:
narzoul 2016-04-06 22:35:54 +02:00
parent f12b95ec9f
commit 1a3cb2be4d

View File

@ -18,6 +18,7 @@ namespace
std::unordered_map<HWND, RECT> g_prevWindowRect; std::unordered_map<HWND, RECT> g_prevWindowRect;
void disableDwmAttributes(HWND hwnd); void disableDwmAttributes(HWND hwnd);
void onActivate(HWND hwnd);
void onMenuSelect(); void onMenuSelect();
void onWindowPosChanged(HWND hwnd); void onWindowPosChanged(HWND hwnd);
void removeDropShadow(HWND hwnd); void removeDropShadow(HWND hwnd);
@ -43,6 +44,10 @@ namespace
{ {
onWindowPosChanged(ret->hwnd); onWindowPosChanged(ret->hwnd);
} }
else if (WM_ACTIVATE == ret->message)
{
onActivate(ret->hwnd);
}
else if (WM_COMMAND == ret->message) else if (WM_COMMAND == ret->message)
{ {
auto notifCode = HIWORD(ret->wParam); auto notifCode = HIWORD(ret->wParam);
@ -95,7 +100,7 @@ namespace
{ {
if (OBJID_TITLEBAR == idObject) if (OBJID_TITLEBAR == idObject)
{ {
CompatGdi::TitleBar(hwnd, compatDc).drawAll(); CompatGdi::TitleBar(hwnd, compatDc).drawButtons();
} }
else if (OBJID_HSCROLL == idObject) else if (OBJID_HSCROLL == idObject)
{ {
@ -113,6 +118,24 @@ namespace
} }
} }
void onActivate(HWND hwnd)
{
RECT windowRect = {};
GetWindowRect(hwnd, &windowRect);
RECT clientRect = {};
GetClientRect(hwnd, &clientRect);
POINT clientOrigin = {};
ClientToScreen(hwnd, &clientOrigin);
OffsetRect(&windowRect, -clientOrigin.x, -clientOrigin.y);
HRGN ncRgn = CreateRectRgnIndirect(&windowRect);
HRGN clientRgn = CreateRectRgnIndirect(&clientRect);
CombineRgn(ncRgn, ncRgn, clientRgn, RGN_DIFF);
RedrawWindow(hwnd, nullptr, ncRgn, RDW_FRAME | RDW_INVALIDATE);
DeleteObject(clientRgn);
DeleteObject(ncRgn);
}
void onMenuSelect() void onMenuSelect()
{ {
HWND menuWindow = FindWindow(reinterpret_cast<LPCSTR>(0x8000), nullptr); HWND menuWindow = FindWindow(reinterpret_cast<LPCSTR>(0x8000), nullptr);