From 91274c58b1772dfe38d3fcab291693141e822684 Mon Sep 17 00:00:00 2001 From: Daniel <49284193+dnlkrs@users.noreply.github.com> Date: 周五, 06 12月 2024 21:55:30 +0800 Subject: [PATCH] Fix WindowsRegistryKey for Qt 6.8.1 (#154) --- src/core/qwindowkit_windows.h | 45 +++++++++++++++++++++++++++++++++++++-------- 1 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/core/qwindowkit_windows.h b/src/core/qwindowkit_windows.h index c84f50d..20f24ef 100644 --- a/src/core/qwindowkit_windows.h +++ b/src/core/qwindowkit_windows.h @@ -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 + #ifndef QWINDOWKIT_WINDOWS_H #define QWINDOWKIT_WINDOWS_H @@ -18,14 +22,6 @@ # define GET_Y_LPARAM(lp) (static_cast<int>(static_cast<short>(HIWORD(lp)))) #endif -#ifndef IsMinimized -# define IsMinimized(hwnd) (::IsIconic(hwnd)) -#endif - -#ifndef IsMaximized -# define IsMaximized(hwnd) (::IsZoomed(hwnd)) -#endif - #ifndef RECT_WIDTH # define RECT_WIDTH(rect) ((rect).right - (rect).left) #endif @@ -35,6 +31,8 @@ #endif // Maybe undocumented Windows messages +// https://github.com/tinysec/public/blob/master/win32k/MessageTable.md +// https://ulib.sourceforge.io/doxy/a00239.html #ifndef WM_UAHDESTROYWINDOW # define WM_UAHDESTROYWINDOW (0x0090) #endif @@ -112,6 +110,7 @@ // // Registry Helpers // + #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) class QWK_CORE_EXPORT WindowsRegistryKey { public: @@ -126,6 +125,9 @@ QString stringValue(QStringView subKey) const; QPair<DWORD, bool> dwordValue(QStringView subKey) const; + template<typename T> + std::optional<T> value(QStringView subKey) const; + private: HKEY m_key; @@ -135,6 +137,33 @@ inline bool WindowsRegistryKey::isValid() const { return m_key != nullptr; } + + template<> + inline std::optional<DWORD> WindowsRegistryKey::value(QStringView subKey) const { + const auto dv = dwordValue(subKey); + if (!dv.second) { + return {}; + } + return dv.first; + } +#elif QT_VERSION < QT_VERSION_CHECK(6, 8, 1) + class WindowsRegistryKey : public QWinRegistryKey { + public: + + explicit WindowsRegistryKey(HKEY parentHandle, QStringView subKey, REGSAM permissions = KEY_READ, REGSAM access = 0); + + template<typename T> + inline std::optional<T> value(QStringView subKey) const; + }; + + template<> + inline std::optional<DWORD> WindowsRegistryKey::value(QStringView subKey) const { + const auto dv = dwordValue(subKey); + if (!dv.second) { + return {}; + } + return dv.first; + } #else using WindowsRegistryKey = QWinRegistryKey; #endif -- Gitblit v1.9.1