| | |
| | | |
| | | // Win10 1809 (10.0.17763) |
| | | using RefreshImmersiveColorPolicyStatePtr = VOID(WINAPI *)(VOID); // Ordinal 104 |
| | | using AllowDarkModeForWindowPtr = BOOL(WINAPI *)(HWND, BOOL); // Ordinal 133 |
| | | using AllowDarkModeForAppPtr = BOOL(WINAPI *)(BOOL); // Ordinal 135 |
| | | using FlushMenuThemesPtr = VOID(WINAPI *)(VOID); // Ordinal 136 |
| | | using AllowDarkModeForWindowPtr = BOOL(WINAPI *)(HWND, BOOL); // Ordinal 133 |
| | | using AllowDarkModeForAppPtr = BOOL(WINAPI *)(BOOL); // Ordinal 135 |
| | | using FlushMenuThemesPtr = VOID(WINAPI *)(VOID); // Ordinal 136 |
| | | // Win10 1903 (10.0.18362) |
| | | using SetPreferredAppModePtr = PREFERRED_APP_MODE(WINAPI *)(PREFERRED_APP_MODE); // Ordinal 135 |
| | | |
| | |
| | | |
| | | #undef DYNAMIC_API_RESOLVE |
| | | |
| | | #define UNDOC_API_RESOLVE(DLL, NAME, ORDINAL) \ |
| | | #define UNDOC_API_RESOLVE(DLL, NAME, ORDINAL) \ |
| | | p##NAME = reinterpret_cast<decltype(p##NAME)>(DLL.resolve(MAKEINTRESOURCEA(ORDINAL))) |
| | | |
| | | QSystemLibrary uxtheme(QStringLiteral("uxtheme")); |
| | |
| | | static inline constexpr RECT qrect2rect(const QRect &qrect) { |
| | | return RECT{LONG(qrect.left()), LONG(qrect.top()), LONG(qrect.right()), |
| | | LONG(qrect.bottom())}; |
| | | } |
| | | |
| | | static inline constexpr QMargins margins2qmargins(const MARGINS &margins) { |
| | | return {margins.cxLeftWidth, margins.cyTopHeight, margins.cxRightWidth, |
| | | margins.cyBottomHeight}; |
| | | } |
| | | |
| | | static inline constexpr MARGINS qmargins2margins(const QMargins &qmargins) { |
| | | return MARGINS{qmargins.left(), qmargins.right(), qmargins.top(), qmargins.bottom()}; |
| | | } |
| | | |
| | | static inline /*constexpr*/ QString hwnd2str(const WId windowId) { |
| | |
| | | _DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, |
| | | &enabled, sizeof(enabled)))) { |
| | | return enabled; |
| | | } else { |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | static inline QColor getAccentColor() { |
| | |
| | | #endif |
| | | } |
| | | |
| | | static inline quint32 getDpiForWindow(HWND hwnd) { |
| | | const DynamicApis &apis = DynamicApis::instance(); |
| | | if (apis.pGetDpiForWindow) { // Win10 |
| | | return apis.pGetDpiForWindow(hwnd); |
| | | } else if (apis.pGetDpiForMonitor) { // Win8.1 |
| | | HMONITOR monitor = ::MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); |
| | | UINT dpiX{0}; |
| | | UINT dpiY{0}; |
| | | apis.pGetDpiForMonitor(monitor, MDT_EFFECTIVE_DPI, &dpiX, &dpiY); |
| | | return dpiX; |
| | | } else { // Win2K |
| | | HDC hdc = ::GetDC(nullptr); |
| | | const int dpiX = ::GetDeviceCaps(hdc, LOGPIXELSX); |
| | | // const int dpiY = ::GetDeviceCaps(hdc, LOGPIXELSY); |
| | | ::ReleaseDC(nullptr, hdc); |
| | | return quint32(dpiX); |
| | | } |
| | | } |
| | | |
| | | static inline quint32 getSystemMetricsForDpi(int index, quint32 dpi) { |
| | | const DynamicApis &apis = DynamicApis::instance(); |
| | | if (apis.pGetSystemMetricsForDpi) { |
| | | return ::GetSystemMetricsForDpi(index, dpi); |
| | | } |
| | | return ::GetSystemMetrics(index); |
| | | } |
| | | |
| | | static inline quint32 getWindowFrameBorderThickness(HWND hwnd) { |
| | | const DynamicApis &apis = DynamicApis::instance(); |
| | | if (UINT result = 0; SUCCEEDED(apis.pDwmGetWindowAttribute( |
| | | hwnd, _DWMWA_VISIBLE_FRAME_BORDER_THICKNESS, &result, sizeof(result)))) { |
| | | return result; |
| | | } |
| | | return getSystemMetricsForDpi(SM_CXBORDER, getDpiForWindow(hwnd)); |
| | | } |
| | | |
| | | static inline quint32 getResizeBorderThickness(HWND hwnd) { |
| | | const quint32 dpi = getDpiForWindow(hwnd); |
| | | return getSystemMetricsForDpi(SM_CXSIZEFRAME, dpi) + |
| | | getSystemMetricsForDpi(SM_CXPADDEDBORDER, dpi); |
| | | } |
| | | |
| | | static inline quint32 getTitleBarHeight(HWND hwnd) { |
| | | const quint32 dpi = getDpiForWindow(hwnd); |
| | | return getSystemMetricsForDpi(SM_CYCAPTION, dpi) + |
| | | getSystemMetricsForDpi(SM_CXSIZEFRAME, dpi) + |
| | | getSystemMetricsForDpi(SM_CXPADDEDBORDER, dpi); |
| | | } |
| | | |
| | | } |
| | | |
| | | #endif // QWKWINDOWSEXTRA_P_H |