From c1bf0c26683017c77c596c8e55fb78e901ff7b01 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周二, 19 12月 2023 19:56:35 +0800 Subject: [PATCH] minor tweaks --- examples/mainwindow/main.cpp | 9 +++++++++ src/core/contexts/win32windowcontext.cpp | 42 ++++++++++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/examples/mainwindow/main.cpp b/examples/mainwindow/main.cpp index 9e86f81..dd5dc5d 100644 --- a/examples/mainwindow/main.cpp +++ b/examples/mainwindow/main.cpp @@ -16,6 +16,15 @@ Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); QApplication a(argc, argv); +#if 0 && defined(Q_OS_WINDOWS) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QApplication::setFont([]() { + QFont f("Microsoft YaHei"); + f.setStyleStrategy(QFont::PreferAntialias); + f.setPixelSize(15); + return f; + }()); +#endif + MainWindow w; w.show(); return a.exec(); diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index 4465e01..ad502fe 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -437,9 +437,12 @@ } RECT currentWindowRect{}; ::GetWindowRect(hwnd, ¤tWindowRect); - auto newWindowX = activeMonitorRect.left + (currentWindowRect.left - currentMonitorRect.left); + auto newWindowX = + activeMonitorRect.left + (currentWindowRect.left - currentMonitorRect.left); auto newWindowY = activeMonitorRect.top + (currentWindowRect.top - currentMonitorRect.top); - ::SetWindowPos(hwnd, nullptr, newWindowX, newWindowY, RECT_WIDTH(currentWindowRect), RECT_HEIGHT(currentWindowRect), SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); + ::SetWindowPos(hwnd, nullptr, newWindowX, newWindowY, RECT_WIDTH(currentWindowRect), + RECT_HEIGHT(currentWindowRect), + SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); } static inline void bringWindowToFront(HWND hwnd) { @@ -466,7 +469,8 @@ // First try to send a message to the current foreground window to check whether // it is currently hanging or not. if (!::SendMessageTimeoutW(oldForegroundWindow, WM_NULL, 0, 0, - SMTO_BLOCK | SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 1000, nullptr)) { + SMTO_BLOCK | SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 1000, + nullptr)) { // The foreground window hangs, can't activate current window. return; } @@ -475,16 +479,23 @@ // We won't be able to change a window's Z order if it's not our own window, // so we use this small technique to pretend the foreground window is ours. ::AttachThreadInput(windowThreadProcessId, currentThreadId, TRUE); - QWK_USED struct Cleaner { - Cleaner(DWORD idAttach, DWORD idAttachTo) : m_idAttach(idAttach), m_idAttachTo(idAttachTo) {} + + struct Cleaner { + Cleaner(DWORD idAttach, DWORD idAttachTo) + : m_idAttach(idAttach), m_idAttachTo(idAttachTo) { + } ~Cleaner() { ::AttachThreadInput(m_idAttach, m_idAttachTo, FALSE); } + private: - Q_DISABLE_COPY(Cleaner) DWORD m_idAttach; DWORD m_idAttachTo; - } cleaner{ windowThreadProcessId, currentThreadId }; + + Q_DISABLE_COPY(Cleaner) + }; + [[maybe_unused]] Cleaner cleaner{windowThreadProcessId, currentThreadId}; + ::BringWindowToTop(hwnd); // Activate the window too. This will force us to the virtual desktop this // window is on, if it's on another virtual desktop. @@ -1439,10 +1450,21 @@ // Terminal does, however, later I found that if we choose a proper // color, our homemade top border can almost have exactly the same // appearance with the system's one. + struct HitTestRecorder { + HitTestRecorder(Win32WindowContext *ctx, LRESULT *result) + : ctx(ctx), result(result) { + } + ~HitTestRecorder() { + ctx->lastHitTestResult = getHitWindowPart(int(*result)); + } - [[maybe_unused]] const auto &hitTestRecorder = qScopeGuard([this, result]() { - lastHitTestResult = getHitWindowPart(int(*result)); // - }); + private: + Win32WindowContext *ctx; + LRESULT *result; + + Q_DISABLE_COPY(HitTestRecorder) + }; + [[maybe_unused]] HitTestRecorder hitTestRecorder{this, result}; POINT nativeGlobalPos{GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)}; POINT nativeLocalPos = nativeGlobalPos; -- Gitblit v1.9.1