Daniel
2024-12-06 91274c58b1772dfe38d3fcab291693141e822684
src/core/qwindowkit_windows.h
@@ -1,4 +1,5 @@
// Copyright (C) 2023-2024 Stdware Collections
// 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
@@ -21,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
@@ -38,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
@@ -115,6 +110,7 @@
    //
    // Registry Helpers
    //
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
    class QWK_CORE_EXPORT WindowsRegistryKey {
    public:
@@ -129,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;
@@ -138,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