From 9dcea027f16c4ce5852da3dfc8aca284c582bd7d Mon Sep 17 00:00:00 2001
From: sola.lu <sola.lu.greentest.com.cn>
Date: 周五, 06 6月 2025 18:19:18 +0800
Subject: [PATCH] 1.注释掉custom margin,解决程序放大后,遮盖窗口底部内容的问题。

---
 src/core/qwindowkit_windows.cpp |   93 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 83 insertions(+), 10 deletions(-)

diff --git a/src/core/qwindowkit_windows.cpp b/src/core/qwindowkit_windows.cpp
index b74167f..640528c 100644
--- a/src/core/qwindowkit_windows.cpp
+++ b/src/core/qwindowkit_windows.cpp
@@ -1,18 +1,91 @@
+// 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 "qwindowkit_windows.h"
 
 namespace QWK {
 
-    RTL_OSVERSIONINFOW GetRealOSVersion() {
-        static const auto result = []() -> RTL_OSVERSIONINFOW {
-            HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll");
-            using RtlGetVersionPtr = NTSTATUS(WINAPI *)(PRTL_OSVERSIONINFOW);
-            auto pRtlGetVersion = reinterpret_cast<RtlGetVersionPtr>(::GetProcAddress(hMod, "RtlGetVersion"));
-            RTL_OSVERSIONINFOW rovi{};
-            rovi.dwOSVersionInfoSize = sizeof(rovi);
-            pRtlGetVersion(&rovi);
-            return rovi;
-        }();
+    static RTL_OSVERSIONINFOW GetRealOSVersionImpl() {
+        HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll");
+        Q_ASSERT(hMod);
+        using RtlGetVersionPtr = NTSTATUS(WINAPI *)(PRTL_OSVERSIONINFOW);
+        auto pRtlGetVersion =
+            reinterpret_cast<RtlGetVersionPtr>(::GetProcAddress(hMod, "RtlGetVersion"));
+        Q_ASSERT(pRtlGetVersion);
+        RTL_OSVERSIONINFOW rovi{};
+        rovi.dwOSVersionInfoSize = sizeof(rovi);
+        pRtlGetVersion(&rovi);
+        return rovi;
+    }
+
+    namespace Private {
+
+        RTL_OSVERSIONINFOW GetRealOSVersion() {
+            static const auto result = GetRealOSVersionImpl();
+            return result;
+        }
+
+    }
+
+#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
+    WindowsRegistryKey::WindowsRegistryKey(HKEY parentHandle, QStringView subKey,
+                                           REGSAM permissions, REGSAM access) {
+        if (::RegOpenKeyExW(parentHandle, reinterpret_cast<const wchar_t *>(subKey.utf16()), 0,
+                            permissions | access, &m_key) != ERROR_SUCCESS) {
+            m_key = nullptr;
+        }
+    }
+
+    WindowsRegistryKey::~WindowsRegistryKey() {
+        close();
+    }
+
+    void WindowsRegistryKey::close() {
+        if (isValid()) {
+            ::RegCloseKey(m_key);
+            m_key = nullptr;
+        }
+    }
+
+    QString WindowsRegistryKey::stringValue(QStringView subKey) const {
+        QString result;
+        if (!isValid())
+            return result;
+        DWORD type;
+        DWORD size;
+        auto subKeyC = reinterpret_cast<const wchar_t *>(subKey.utf16());
+        if (::RegQueryValueExW(m_key, subKeyC, nullptr, &type, nullptr, &size) != ERROR_SUCCESS ||
+            (type != REG_SZ && type != REG_EXPAND_SZ) || size <= 2) {
+            return result;
+        }
+        // Reserve more for rare cases where trailing '\0' are missing in registry.
+        // Rely on 0-termination since strings of size 256 padded with 0 have been
+        // observed (QTBUG-84455).
+        size += 2;
+        QVarLengthArray<unsigned char> buffer(static_cast<int>(size));
+        std::fill(buffer.data(), buffer.data() + size, 0u);
+        if (::RegQueryValueExW(m_key, subKeyC, nullptr, &type, buffer.data(), &size) ==
+            ERROR_SUCCESS)
+            result = QString::fromWCharArray(reinterpret_cast<const wchar_t *>(buffer.constData()));
         return result;
     }
 
+    std::pair<DWORD, bool> WindowsRegistryKey::dwordValue(QStringView subKey) const {
+        if (!isValid())
+            return std::make_pair(0, false);
+        DWORD type;
+        auto subKeyC = reinterpret_cast<const wchar_t *>(subKey.utf16());
+        if (::RegQueryValueExW(m_key, subKeyC, nullptr, &type, nullptr, nullptr) != ERROR_SUCCESS ||
+            type != REG_DWORD) {
+            return std::make_pair(0, false);
+        }
+        DWORD value = 0;
+        DWORD size = sizeof(value);
+        const bool ok =
+            ::RegQueryValueExW(m_key, subKeyC, nullptr, nullptr,
+                               reinterpret_cast<unsigned char *>(&value), &size) == ERROR_SUCCESS;
+        return std::make_pair(value, ok);
+    }
+#endif
 }
\ No newline at end of file

--
Gitblit v1.9.1