From 03605a234142933dc49f1a6b2fbf49ba007d87f8 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周一, 29 1月 2024 22:10:43 +0800 Subject: [PATCH] Add "setGeometry" to delegate --- src/core/contexts/win32windowcontext.cpp | 49 +++++++++---------------------------------------- 1 files changed, 9 insertions(+), 40 deletions(-) diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index 64050b5..4a859c7 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -1,3 +1,7 @@ +// Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware) +// Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao) +// SPDX-License-Identifier: Apache-2.0 + #include "win32windowcontext_p.h" #include <optional> @@ -92,18 +96,6 @@ monitorInfo.cbSize = sizeof(monitorInfo); ::GetMonitorInfoW(monitor, &monitorInfo); return monitorInfo; - } - - static inline void moveWindowToDesktopCenter(HWND hwnd) { - MONITORINFOEXW monitorInfo = getMonitorForWindow(hwnd); - RECT windowRect{}; - ::GetWindowRect(hwnd, &windowRect); - const auto newX = monitorInfo.rcMonitor.left + - (RECT_WIDTH(monitorInfo.rcMonitor) - RECT_WIDTH(windowRect)) / 2; - const auto newY = monitorInfo.rcMonitor.top + - (RECT_HEIGHT(monitorInfo.rcMonitor) - RECT_HEIGHT(windowRect)) / 2; - ::SetWindowPos(hwnd, nullptr, newX, newY, 0, 0, - SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); } static inline void moveWindowToMonitor(HWND hwnd, const MONITORINFOEXW &activeMonitor) { @@ -559,14 +551,6 @@ void Win32WindowContext::virtual_hook(int id, void *data) { switch (id) { - case CentralizeHook: { - if (!windowId) - return; - const auto hwnd = reinterpret_cast<HWND>(windowId); - moveWindowToDesktopCenter(hwnd); - return; - } - case RaiseWindowHook: { if (!windowId) return; @@ -602,8 +586,8 @@ return; } - case DrawWindows10BorderHook: { #if QWINDOWKIT_CONFIG(ENABLE_WINDOWS_SYSTEM_BORDERS) + case DrawWindows10BorderHook: { if (!windowId) return; @@ -643,12 +627,10 @@ QPoint{m_windowHandle->width(), 0} }); painter.restore(); -#endif return; } case DrawWindows10BorderHook2: { -#if QWINDOWKIT_CONFIG(ENABLE_WINDOWS_SYSTEM_BORDERS) if (!m_windowHandle) return; @@ -669,9 +651,9 @@ ::FillRect(hdc, &rcTopBorder, reinterpret_cast<HBRUSH>(::GetStockObject(BLACK_BRUSH))); ::ReleaseDC(hWnd, hdc); -#endif return; } +#endif default: break; @@ -680,7 +662,7 @@ } QVariant Win32WindowContext::windowAttribute(const QString &key) const { - if (key == QStringLiteral("title-bar-rect")) { + if (key == QStringLiteral("window-rect")) { if (!m_windowHandle) return {}; @@ -731,13 +713,13 @@ static auto margins = QVariant::fromValue(QMargins(1, 1, 1, 1)); // If we remove the system border, the window will lose its shadow. If dwm is enabled, - // then you need to set at least 1px margins, otherwise the following operation will + // then we need to set at least 1px margins, otherwise the following operation will // fail with no effect. setWindowAttribute(QStringLiteral("extra-margins"), margins); } // We should disable WS_SYSMENU, otherwise the system button icons will be visible if mica - // is enabled and the title bar is transparent + // is enabled and the title bar is transparent. { auto style = ::GetWindowLongPtrW(hWnd, GWL_STYLE); if (isSystemBorderEnabled()) { @@ -1324,19 +1306,6 @@ bool Win32WindowContext::customWindowHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result) { switch (message) { - case WM_SHOWWINDOW: { - if (!initialCentered) { - // If wParam is TRUE, the window is being shown. - // If lParam is zero, the message was sent because of a call to the ShowWindow - // function. - if (wParam && !lParam) { - initialCentered = true; - moveWindowToDesktopCenter(hWnd); - } - } - break; - } - case WM_NCHITTEST: { // 鍘熺敓Win32绐楀彛鍙湁椤惰竟鏄湪绐楀彛鍐呴儴resize鐨勶紝鍏朵綑涓夎竟閮芥槸鍦ㄧ獥鍙� // 澶栭儴杩涜resize鐨勶紝鍏跺師鐞嗘槸锛學S_THICKFRAME杩欎釜绐楀彛鏍峰紡浼氬湪绐� -- Gitblit v1.9.1