From 3cfe15a9c3db0993d8b8fef5d148625840e5a75c Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周二, 05 12月 2023 15:43:39 +0800 Subject: [PATCH] Add host interface --- src/core/contexts/win32windowcontext_p.h | 37 +++++++++++++++++++++++++++++++------ 1 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/core/contexts/win32windowcontext_p.h b/src/core/contexts/win32windowcontext_p.h index f1ab71e..269530e 100644 --- a/src/core/contexts/win32windowcontext_p.h +++ b/src/core/contexts/win32windowcontext_p.h @@ -9,17 +9,42 @@ class QWK_CORE_EXPORT Win32WindowContext : public AbstractWindowContext { Q_OBJECT public: - Win32WindowContext(QWindow *window, WindowItemDelegate *delegate); - ~Win32WindowContext(); + Win32WindowContext(QObject *host, WindowItemDelegate *delegate); + ~Win32WindowContext() override; + + enum WindowPart { + Outside, + ClientArea, + ChromeButton, + ResizeBorder, + FixedBorder, + TitleBar, + }; public: bool setup() override; - protected: - WId windowId; - WNDPROC qtWindowProc; // Original Qt window proc function + bool windowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result); - static LRESULT windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + // In order to perfectly apply Windows 11 Snap Layout into the Qt window, we need to + // intercept and simulate most of the mouse events, so that the processing logic + // is quite complex. Simultaneously, in order to make the handling code of other + // Windows messages clearer, we have separated them into this function. + bool snapLayoutHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, + LRESULT *result); + + bool customWindowHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, + LRESULT *result); + + protected: + WId windowId = 0; + + // The last hit test result, helpful to handle WM_MOUSEMOVE and WM_NCMOUSELEAVE. + WindowPart lastHitTestResult = WindowPart::Outside; + + // Whether the last mouse leave message is blocked, mainly for handling the unexpected + // WM_MOUSELEAVE. + bool mouseLeaveBlocked = false; }; } -- Gitblit v1.9.1