| | |
| | | // 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 |
| | |
| | | # 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 |
| | |
| | | #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 |
| | |
| | | // |
| | | // Registry Helpers |
| | | // |
| | | |
| | | #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) |
| | | class QWK_CORE_EXPORT WindowsRegistryKey { |
| | | public: |
| | |
| | | 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; |
| | | |
| | |
| | | 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 |