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