From 2806c386d34bf83689c505c9dd623544ba241eb3 Mon Sep 17 00:00:00 2001 From: PrzemyslawTusinski <61138537+PrzemyslawTusinski@users.noreply.github.com> Date: Fri, 3 Apr 2020 20:17:12 +0200 Subject: [PATCH] fancyzones unity3d crash fix (#1914) * fancyzones unity3d crash fix * intelisence warning fix, and review issue fix * Fix for review comment --- src/modules/fancyzones/lib/ZoneWindow.cpp | 36 +++++++++++++++-------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/modules/fancyzones/lib/ZoneWindow.cpp b/src/modules/fancyzones/lib/ZoneWindow.cpp index e3e5bca1712..5e070840e34 100644 --- a/src/modules/fancyzones/lib/ZoneWindow.cpp +++ b/src/modules/fancyzones/lib/ZoneWindow.cpp @@ -259,8 +259,12 @@ struct ZoneWindow : public winrt::implements static const UINT m_showAnimationDuration = 200; // ms static const UINT m_flashDuration = 700; // ms - HWND draggedWindow; - BYTE draggedWindowInitialAlpha; + HWND draggedWindow = nullptr; + long draggedWindowExstyle = 0; + COLORREF draggedWindowCrKey = RGB(0, 0, 0); + DWORD draggedWindowDwFlags = 0; + BYTE draggedWindowInitialAlpha = 0; + ULONG_PTR gdiplusToken; }; @@ -335,21 +339,26 @@ bool ZoneWindow::Init(IZoneWindowHost* host, HINSTANCE hinstance, HMONITOR monit IFACEMETHODIMP ZoneWindow::MoveSizeEnter(HWND window, bool dragEnabled) noexcept { + if (m_windowMoveSize) + { + return E_INVALIDARG; + } + if (m_host->isMakeDraggedWindowTransparentActive()) { + RestoreOrginalTransparency(); + + draggedWindowExstyle = GetWindowLong(window, GWL_EXSTYLE); + draggedWindow = window; SetWindowLong(window, GWL_EXSTYLE, - GetWindowLong(window, GWL_EXSTYLE) | WS_EX_LAYERED); + draggedWindowExstyle | WS_EX_LAYERED); - GetLayeredWindowAttributes(window, 0, &draggedWindowInitialAlpha, 0); + GetLayeredWindowAttributes(window, &draggedWindowCrKey, &draggedWindowInitialAlpha, &draggedWindowDwFlags); SetLayeredWindowAttributes(window, 0, (255 * 50) / 100, LWA_ALPHA); } - if (m_windowMoveSize) - { - return E_INVALIDARG; - } m_dragEnabled = dragEnabled; m_windowMoveSize = window; @@ -415,10 +424,8 @@ ZoneWindow::RestoreOrginalTransparency() noexcept { if (m_host->isMakeDraggedWindowTransparentActive() && draggedWindow != nullptr) { - SetLayeredWindowAttributes(draggedWindow, - 0, - draggedWindowInitialAlpha == 0 ? 255 : draggedWindowInitialAlpha, - LWA_ALPHA); + SetLayeredWindowAttributes(draggedWindow, draggedWindowCrKey, draggedWindowInitialAlpha, draggedWindowDwFlags); + SetWindowLong(draggedWindow, GWL_EXSTYLE, draggedWindowExstyle); draggedWindow = nullptr; } } @@ -738,7 +745,10 @@ void ZoneWindow::CycleActiveZoneSetInternal(DWORD wparam, Trace::ZoneWindow::Inp void ZoneWindow::FlashZones() noexcept { // "Turning FLASHING_ZONE option off" - if(true) return; + if (true) + { + return; + } m_flashMode = true;