QtCanpool 3.3.0
载入中...
搜索中...
未找到
windowkit_win.h
浏览该文件的文档.
1
5#ifndef WINDOWKIT_WIN_H
6#define WINDOWKIT_WIN_H
7
8#include <QtCore/qglobal.h>
9#include <QtCore/qt_windows.h>
10
11#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
12#include <QtCore/private/qwinregistry_p.h>
13#endif
14
15#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
16#include <QStringView>
17#include <QPair>
18#include <QString>
19#endif
20
21#include "qxwindow_global.h"
22
23#ifndef GET_X_LPARAM
24#define GET_X_LPARAM(lp) (static_cast<int>(static_cast<short>(LOWORD(lp))))
25#endif
26
27#ifndef GET_Y_LPARAM
28#define GET_Y_LPARAM(lp) (static_cast<int>(static_cast<short>(HIWORD(lp))))
29#endif
30
31#ifndef IsMinimized
32#define IsMinimized(hwnd) (::IsIconic(hwnd))
33#endif
34
35#ifndef IsMaximized
36#define IsMaximized(hwnd) (::IsZoomed(hwnd))
37#endif
38
39#ifndef RECT_WIDTH
40#define RECT_WIDTH(rect) ((rect).right - (rect).left)
41#endif
42
43#ifndef RECT_HEIGHT
44#define RECT_HEIGHT(rect) ((rect).bottom - (rect).top)
45#endif
46
47// Maybe undocumented Windows messages
48#ifndef WM_UAHDESTROYWINDOW
49#define WM_UAHDESTROYWINDOW (0x0090)
50#endif
51
52#ifndef WM_UNREGISTER_WINDOW_SERVICES
53#define WM_UNREGISTER_WINDOW_SERVICES (0x0272)
54#endif
55
56#ifndef WM_NCUAHDRAWCAPTION
57#define WM_NCUAHDRAWCAPTION (0x00AE)
58#endif
59
60#ifndef WM_NCUAHDRAWFRAME
61#define WM_NCUAHDRAWFRAME (0x00AF)
62#endif
63
64#ifndef SM_CXPADDEDBORDER
65#define SM_CXPADDEDBORDER 92
66#endif
67
68#ifndef WM_DPICHANGED
69#define WM_DPICHANGED 0x02E0
70#endif
71
72#ifndef ABM_GETAUTOHIDEBAREX
73#define ABM_GETAUTOHIDEBAREX 0x0000000b
74#endif
75
77
78namespace Private
79{
80
81RTL_OSVERSIONINFOW GetRealOSVersion();
82
84{
85 RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
86 return (rovi.dwMajorVersion > 10) ||
87 (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion == 0 && rovi.dwBuildNumber >= 22621);
88}
89
91{
92 RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
93 return (rovi.dwMajorVersion > 10) ||
94 (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion == 0 && rovi.dwBuildNumber >= 22000);
95}
96
98{
99 RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
100 return (rovi.dwMajorVersion > 10) ||
101 (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion == 0 && rovi.dwBuildNumber >= 18362);
102}
103
105{
106 RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
107 return (rovi.dwMajorVersion > 10) ||
108 (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion == 0 && rovi.dwBuildNumber >= 17763);
109}
110
112{
113 RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
114 return (rovi.dwMajorVersion > 10) || (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion == 0);
115}
116
118{
119 RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
120 return (rovi.dwMajorVersion > 6) || (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 3);
121}
122
124{
125 RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
126 return (rovi.dwMajorVersion > 6) || (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 2);
127}
128
133
134} // namespace Private
135
136//
137// Registry Helpers
138//
139#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
140class WindowsRegistryKey
141{
142public:
143 WindowsRegistryKey(HKEY parentHandle, QStringView subKey, REGSAM permissions = KEY_READ, REGSAM access = 0);
144
145 ~WindowsRegistryKey();
146
147 inline bool isValid() const;
148
149 void close();
150 QString stringValue(QStringView subKey) const;
151 QPair<DWORD, bool> dwordValue(QStringView subKey) const;
152private:
153 HKEY m_key;
154
155 Q_DISABLE_COPY(WindowsRegistryKey)
156};
157
158inline bool WindowsRegistryKey::isValid() const
159{
160 return m_key != nullptr;
161}
162#else
163using WindowsRegistryKey = QWinRegistryKey;
164#endif
165
166//
167// Version Helpers
168//
169
170static inline bool isWin8OrGreater()
171{
172 static const bool result = Private::IsWindows8OrGreater_Real();
173 return result;
174}
175
176static inline bool isWin8Point1OrGreater()
177{
178 static const bool result = Private::IsWindows8Point1OrGreater_Real();
179 return result;
180}
181
182static inline bool isWin10OrGreater()
183{
184 static const bool result = Private::IsWindows10OrGreater_Real();
185 return result;
186}
187
188static inline bool isWin101809OrGreater()
189{
190 static const bool result = Private::IsWindows101809OrGreater_Real();
191 return result;
192}
193
194static inline bool isWin101903OrGreater()
195{
196 static const bool result = Private::IsWindows101903OrGreater_Real();
197 return result;
198}
199
200static inline bool isWin11OrGreater()
201{
202 static const bool result = Private::IsWindows11OrGreater_Real();
203 return result;
204}
205
206static inline bool isWin1122H2OrGreater()
207{
208 static const bool result = Private::IsWindows1122H2OrGreater_Real();
209 return result;
210}
211
212static inline bool isWin10Only()
213{
214 static const bool result = Private::IsWindows10Only_Real();
215 return result;
216};
217
218//
219// Native Event Helpers
220//
221
222inline bool isImmersiveColorSetChange(WPARAM wParam, LPARAM lParam)
223{
224 return !wParam && lParam && std::wcscmp(reinterpret_cast<LPCWSTR>(lParam), L"ImmersiveColorSet") == 0;
225}
226
228
229#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
230#include <QMargins>
231#include <QMetaType>
232// for QVariant::fromValue(QMargins(...))
233Q_DECLARE_METATYPE(QMargins)
234#endif
235
236#endif // WINDOWKIT_WIN_H
bool IsWindows101809OrGreater_Real()
bool IsWindows8Point1OrGreater_Real()
bool IsWindows1122H2OrGreater_Real()
bool IsWindows11OrGreater_Real()
RTL_OSVERSIONINFOW GetRealOSVersion()
bool IsWindows8OrGreater_Real()
bool IsWindows10OrGreater_Real()
bool IsWindows101903OrGreater_Real()
bool isImmersiveColorSetChange(WPARAM wParam, LPARAM lParam)
QWinRegistryKey WindowsRegistryKey
#define QX_WINDOW_END_NAMESPACE
#define QX_WINDOW_BEGIN_NAMESPACE