5#ifndef QWINDOWKIT_WINDOWS_H
6#define QWINDOWKIT_WINDOWS_H
16#include <QtCore/qt_windows.h>
17#include <QtCore/qglobal.h>
19#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
20# include <QtCore/private/qwinregistry_p.h>
23#include <QWKCore/qwkglobal.h>
26# define GET_X_LPARAM(lp) (static_cast<int>(static_cast<short>(LOWORD(lp))))
30# define GET_Y_LPARAM(lp) (static_cast<int>(static_cast<short>(HIWORD(lp))))
34# define RECT_WIDTH(rect) ((rect).right - (rect).left)
38# define RECT_HEIGHT(rect) ((rect).bottom - (rect).top)
41#ifndef USER_DEFAULT_SCREEN_DPI
42# define USER_DEFAULT_SCREEN_DPI (96)
48#ifndef WM_UAHDESTROYWINDOW
49# define WM_UAHDESTROYWINDOW (0x0090)
52#ifndef WM_UNREGISTER_WINDOW_SERVICES
53# define WM_UNREGISTER_WINDOW_SERVICES (0x0272)
56#ifndef WM_NCUAHDRAWCAPTION
57# define WM_NCUAHDRAWCAPTION (0x00AE)
60#ifndef WM_NCUAHDRAWFRAME
61# define WM_NCUAHDRAWFRAME (0x00AF)
65#ifndef WM_NCPOINTERUPDATE
66# define WM_NCPOINTERUPDATE (0x0241)
69#ifndef WM_NCPOINTERDOWN
70# define WM_NCPOINTERDOWN (0x0242)
74# define WM_NCPOINTERUP (0x0243)
77using QWK_OSVERSIONINFOW =
struct _QWK_OSVERSIONINFOW {
78 DWORD dwOSVersionInfoSize;
83 wchar_t szCSDVersion[128];
90 QWK_CORE_EXPORT QWK_OSVERSIONINFOW GetRealOSVersion();
92 inline bool IsWindows1122H2OrGreater_Real() {
93 QWK_OSVERSIONINFOW rovi = GetRealOSVersion();
94 return (rovi.dwMajorVersion > 10) ||
95 (rovi.dwMajorVersion == 10 &&
96 (rovi.dwMinorVersion > 0 || rovi.dwBuildNumber >= 22621));
99 inline bool IsWindows11OrGreater_Real() {
100 QWK_OSVERSIONINFOW rovi = GetRealOSVersion();
101 return (rovi.dwMajorVersion > 10) ||
102 (rovi.dwMajorVersion == 10 &&
103 (rovi.dwMinorVersion > 0 || rovi.dwBuildNumber >= 22000));
106 inline bool IsWindows1020H1OrGreater_Real() {
107 QWK_OSVERSIONINFOW rovi = GetRealOSVersion();
108 return (rovi.dwMajorVersion > 10) ||
109 (rovi.dwMajorVersion == 10 &&
110 (rovi.dwMinorVersion > 0 || rovi.dwBuildNumber >= 19041));
113 inline bool IsWindows102004OrGreater_Real() {
114 return IsWindows1020H1OrGreater_Real();
117 inline bool IsWindows101903OrGreater_Real() {
118 QWK_OSVERSIONINFOW rovi = GetRealOSVersion();
119 return (rovi.dwMajorVersion > 10) ||
120 (rovi.dwMajorVersion == 10 &&
121 (rovi.dwMinorVersion > 0 || rovi.dwBuildNumber >= 18362));
124 inline bool IsWindows1019H1OrGreater_Real() {
125 return IsWindows101903OrGreater_Real();
128 inline bool IsWindows101809OrGreater_Real() {
129 QWK_OSVERSIONINFOW rovi = GetRealOSVersion();
130 return (rovi.dwMajorVersion > 10) ||
131 (rovi.dwMajorVersion == 10 &&
132 (rovi.dwMinorVersion > 0 || rovi.dwBuildNumber >= 17763));
135 inline bool IsWindows10RS5OrGreater_Real() {
136 return IsWindows101809OrGreater_Real();
139 inline bool IsWindows10OrGreater_Real() {
140 QWK_OSVERSIONINFOW rovi = GetRealOSVersion();
141 return rovi.dwMajorVersion >= 10;
144 inline bool IsWindows8Point1OrGreater_Real() {
145 QWK_OSVERSIONINFOW rovi = GetRealOSVersion();
146 return (rovi.dwMajorVersion > 6) ||
147 (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 3);
150 inline bool IsWindows8OrGreater_Real() {
151 QWK_OSVERSIONINFOW rovi = GetRealOSVersion();
152 return (rovi.dwMajorVersion > 6) ||
153 (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 2);
156 inline bool IsWindows10Only_Real() {
157 return IsWindows10OrGreater_Real() && !IsWindows11OrGreater_Real();
166#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
167 class QWK_CORE_EXPORT WindowsRegistryKey {
169 WindowsRegistryKey(HKEY parentHandle, QStringView subKey, REGSAM permissions = KEY_READ,
172 ~WindowsRegistryKey();
174 inline bool isValid()
const;
177 QString stringValue(QStringView subKey)
const;
178 std::pair<DWORD, bool> dwordValue(QStringView subKey)
const;
183 Q_DISABLE_COPY(WindowsRegistryKey)
186 inline bool WindowsRegistryKey::isValid()
const {
187 return m_key !=
nullptr;
189#elif QT_VERSION < QT_VERSION_CHECK(6, 8, 1)
190 using WindowsRegistryKey = QWinRegistryKey;
192 class WindowsRegistryKey :
public QWinRegistryKey {
193#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 1)
194 using SubKeyType =
const wchar_t*;
196 using SubKeyType = QStringView;
199 WindowsRegistryKey(HKEY parentHandle, SubKeyType subKey,
200 REGSAM permissions = KEY_READ, REGSAM access = 0)
201 : QWinRegistryKey(parentHandle, subKey, permissions, access) {
204 inline std::pair<DWORD, bool> dwordValue(SubKeyType subKey)
const;
207 inline std::pair<DWORD, bool> WindowsRegistryKey::dwordValue(SubKeyType subKey)
const {
208 const auto val = value<DWORD>(subKey);
212 return {val.value(),
true};
220 inline bool isWin8OrGreater() {
221 static const bool result = Private::IsWindows8OrGreater_Real();
225 inline bool isWin8Point1OrGreater() {
226 static const bool result = Private::IsWindows8Point1OrGreater_Real();
230 inline bool isWin10OrGreater() {
231 static const bool result = Private::IsWindows10OrGreater_Real();
235 inline bool isWin101809OrGreater() {
236 static const bool result = Private::IsWindows101809OrGreater_Real();
240 inline bool isWin10RS5OrGreater() {
241 return isWin101809OrGreater();
244 inline bool isWin101903OrGreater() {
245 static const bool result = Private::IsWindows101903OrGreater_Real();
249 inline bool isWin1019H1OrGreater() {
250 return isWin101903OrGreater();
253 inline bool isWin1020H1OrGreater() {
254 static const bool result = Private::IsWindows1020H1OrGreater_Real();
258 inline bool isWin102004OrGreater() {
259 return isWin1020H1OrGreater();
262 inline bool isWin11OrGreater() {
263 static const bool result = Private::IsWindows11OrGreater_Real();
267 inline bool isWin1122H2OrGreater() {
268 static const bool result = Private::IsWindows1122H2OrGreater_Real();
272 inline bool isWin10Only() {
273 static const bool result = Private::IsWindows10Only_Real();
281 inline bool isImmersiveColorSetChange(WPARAM wParam, LPARAM lParam) {
282 return !wParam && lParam &&
283 std::wcscmp(
reinterpret_cast<LPCWSTR
>(lParam), L
"ImmersiveColorSet") == 0;
288#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
289Q_DECLARE_METATYPE(QMargins)
QWindowKit namespace.
Definition abstractwindowcontext.cpp:13