parent
88cb48b306
commit
57e732835a
|
@ -26,9 +26,9 @@
|
|||
|
||||
#include <QDebug>
|
||||
#include <QGuiApplication>
|
||||
#include <QLibrary>
|
||||
#include <QMargins>
|
||||
#include <QWindow>
|
||||
#include <QtMath>
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 9, 0))
|
||||
#include <QOperatingSystemVersion>
|
||||
#else
|
||||
|
@ -40,7 +40,6 @@
|
|||
#ifdef QT_WIDGETS_LIB
|
||||
#include <QWidget>
|
||||
#endif
|
||||
#include <QtMath>
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||
#include <qpa/qplatformnativeinterface.h>
|
||||
#else
|
||||
|
@ -136,32 +135,23 @@ bool isWin10OrGreator(const int ver)
|
|||
_WNEF_WINAPI_##funcName m_lp##funcName = nullptr;
|
||||
#endif
|
||||
|
||||
#ifndef WNEF_SYSTEM_LIB_BEGIN
|
||||
#define WNEF_SYSTEM_LIB_BEGIN(libName) \
|
||||
{ \
|
||||
QLibrary library(QString::fromUtf8(#libName));
|
||||
#endif
|
||||
|
||||
#ifndef WNEF_SYSTEM_LIB_END
|
||||
#define WNEF_SYSTEM_LIB_END }
|
||||
#endif
|
||||
|
||||
#ifndef WNEF_RESOLVE_ERROR
|
||||
#ifdef _DEBUG
|
||||
#define WNEF_RESOLVE_ERROR(funcName, errMsg) Q_ASSERT_X(m_lp##funcName, __FUNCTION__, errMsg);
|
||||
#define WNEF_RESOLVE_ERROR(funcName) Q_ASSERT(m_lp##funcName);
|
||||
#else
|
||||
#define WNEF_RESOLVE_ERROR(funcName, errMsg) \
|
||||
#define WNEF_RESOLVE_ERROR(funcName) \
|
||||
if (!m_lp##funcName) { \
|
||||
qCritical().noquote() << "Failed to resolve symbol" << #funcName << ':' << errMsg; \
|
||||
qCritical().noquote() << "Failed to resolve symbol" << #funcName; \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef WNEF_RESOLVE_WINAPI
|
||||
#define WNEF_RESOLVE_WINAPI(funcName) \
|
||||
#define WNEF_RESOLVE_WINAPI(libName, funcName) \
|
||||
if (!m_lp##funcName) { \
|
||||
m_lp##funcName = reinterpret_cast<_WNEF_WINAPI_##funcName>(library.resolve(#funcName)); \
|
||||
WNEF_RESOLVE_ERROR(funcName, qUtf8Printable(library.errorString())) \
|
||||
m_lp##funcName = reinterpret_cast<_WNEF_WINAPI_##funcName>( \
|
||||
GetProcAddress(GetModuleHandleW(L#libName), #funcName)); \
|
||||
WNEF_RESOLVE_ERROR(funcName) \
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -422,25 +412,19 @@ void loadDPIFunctions()
|
|||
resolved = true;
|
||||
// Available since Windows 8.1
|
||||
if (isWin8Point1OrGreator()) {
|
||||
WNEF_SYSTEM_LIB_BEGIN(SHCore)
|
||||
WNEF_RESOLVE_WINAPI(GetDpiForMonitor)
|
||||
WNEF_RESOLVE_WINAPI(GetProcessDpiAwareness)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_RESOLVE_WINAPI(SHCore, GetDpiForMonitor)
|
||||
WNEF_RESOLVE_WINAPI(SHCore, GetProcessDpiAwareness)
|
||||
}
|
||||
// Available since Windows 10, version 1607 (10.0.14393)
|
||||
if (isWin10OrGreator(14393)) {
|
||||
WNEF_SYSTEM_LIB_BEGIN(User32)
|
||||
WNEF_RESOLVE_WINAPI(GetDpiForWindow)
|
||||
WNEF_RESOLVE_WINAPI(GetDpiForSystem)
|
||||
WNEF_RESOLVE_WINAPI(GetSystemMetricsForDpi)
|
||||
WNEF_RESOLVE_WINAPI(AdjustWindowRectExForDpi)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_RESOLVE_WINAPI(User32, GetDpiForWindow)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetDpiForSystem)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetSystemMetricsForDpi)
|
||||
WNEF_RESOLVE_WINAPI(User32, AdjustWindowRectExForDpi)
|
||||
}
|
||||
// Available since Windows 10, version 1803 (10.0.17134)
|
||||
if (isWin10OrGreator(17134)) {
|
||||
WNEF_SYSTEM_LIB_BEGIN(User32)
|
||||
WNEF_RESOLVE_WINAPI(GetSystemDpiForProcess)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_RESOLVE_WINAPI(User32, GetSystemDpiForProcess)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -470,88 +454,72 @@ void ResolveWin32APIs()
|
|||
}
|
||||
resolved = true;
|
||||
// Available since Windows 2000.
|
||||
WNEF_SYSTEM_LIB_BEGIN(User32)
|
||||
WNEF_RESOLVE_WINAPI(OffsetRect)
|
||||
WNEF_RESOLVE_WINAPI(GetWindowDC)
|
||||
WNEF_RESOLVE_WINAPI(GetDCEx)
|
||||
WNEF_RESOLVE_WINAPI(AdjustWindowRectEx)
|
||||
WNEF_RESOLVE_WINAPI(EndPaint)
|
||||
WNEF_RESOLVE_WINAPI(BeginPaint)
|
||||
WNEF_RESOLVE_WINAPI(FillRect)
|
||||
WNEF_RESOLVE_WINAPI(GetWindowInfo)
|
||||
WNEF_RESOLVE_WINAPI(IsWindow)
|
||||
WNEF_RESOLVE_WINAPI(SetWindowRgn)
|
||||
WNEF_RESOLVE_WINAPI(InvalidateRect)
|
||||
WNEF_RESOLVE_WINAPI(UpdateWindow)
|
||||
WNEF_RESOLVE_WINAPI(SetWindowPos)
|
||||
WNEF_RESOLVE_WINAPI(SendMessageW)
|
||||
WNEF_RESOLVE_WINAPI(GetDesktopWindow)
|
||||
WNEF_RESOLVE_WINAPI(GetAncestor)
|
||||
WNEF_RESOLVE_WINAPI(DefWindowProcW)
|
||||
WNEF_RESOLVE_WINAPI(SetLayeredWindowAttributes)
|
||||
WNEF_RESOLVE_WINAPI(MoveWindow)
|
||||
WNEF_RESOLVE_WINAPI(IsZoomed)
|
||||
WNEF_RESOLVE_WINAPI(IsIconic)
|
||||
WNEF_RESOLVE_WINAPI(GetSystemMetrics)
|
||||
WNEF_RESOLVE_WINAPI(GetDC)
|
||||
WNEF_RESOLVE_WINAPI(ReleaseDC)
|
||||
WNEF_RESOLVE_WINAPI(RedrawWindow)
|
||||
WNEF_RESOLVE_WINAPI(GetClientRect)
|
||||
WNEF_RESOLVE_WINAPI(GetWindowRect)
|
||||
WNEF_RESOLVE_WINAPI(ScreenToClient)
|
||||
WNEF_RESOLVE_WINAPI(EqualRect)
|
||||
#ifdef Q_PROCESSOR_X86_64
|
||||
WNEF_RESOLVE_WINAPI(User32, OffsetRect)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetWindowDC)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetDCEx)
|
||||
WNEF_RESOLVE_WINAPI(User32, AdjustWindowRectEx)
|
||||
WNEF_RESOLVE_WINAPI(User32, EndPaint)
|
||||
WNEF_RESOLVE_WINAPI(User32, BeginPaint)
|
||||
WNEF_RESOLVE_WINAPI(User32, FillRect)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetWindowInfo)
|
||||
WNEF_RESOLVE_WINAPI(User32, IsWindow)
|
||||
WNEF_RESOLVE_WINAPI(User32, SetWindowRgn)
|
||||
WNEF_RESOLVE_WINAPI(User32, InvalidateRect)
|
||||
WNEF_RESOLVE_WINAPI(User32, UpdateWindow)
|
||||
WNEF_RESOLVE_WINAPI(User32, SetWindowPos)
|
||||
WNEF_RESOLVE_WINAPI(User32, SendMessageW)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetDesktopWindow)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetAncestor)
|
||||
WNEF_RESOLVE_WINAPI(User32, DefWindowProcW)
|
||||
WNEF_RESOLVE_WINAPI(User32, SetLayeredWindowAttributes)
|
||||
WNEF_RESOLVE_WINAPI(User32, MoveWindow)
|
||||
WNEF_RESOLVE_WINAPI(User32, IsZoomed)
|
||||
WNEF_RESOLVE_WINAPI(User32, IsIconic)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetSystemMetrics)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetDC)
|
||||
WNEF_RESOLVE_WINAPI(User32, ReleaseDC)
|
||||
WNEF_RESOLVE_WINAPI(User32, RedrawWindow)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetClientRect)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetWindowRect)
|
||||
WNEF_RESOLVE_WINAPI(User32, ScreenToClient)
|
||||
WNEF_RESOLVE_WINAPI(User32, EqualRect)
|
||||
#if defined(WIN64) || defined(_WIN64)
|
||||
// These functions only exist in 64 bit User32.dll
|
||||
WNEF_RESOLVE_WINAPI(GetWindowLongPtrW)
|
||||
WNEF_RESOLVE_WINAPI(SetWindowLongPtrW)
|
||||
WNEF_RESOLVE_WINAPI(GetClassLongPtrW)
|
||||
WNEF_RESOLVE_WINAPI(SetClassLongPtrW)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetWindowLongPtrW)
|
||||
WNEF_RESOLVE_WINAPI(User32, SetWindowLongPtrW)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetClassLongPtrW)
|
||||
WNEF_RESOLVE_WINAPI(User32, SetClassLongPtrW)
|
||||
#else
|
||||
WNEF_RESOLVE_WINAPI(GetWindowLongW)
|
||||
WNEF_RESOLVE_WINAPI(SetWindowLongW)
|
||||
WNEF_RESOLVE_WINAPI(GetClassLongW)
|
||||
WNEF_RESOLVE_WINAPI(SetClassLongW)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetWindowLongW)
|
||||
WNEF_RESOLVE_WINAPI(User32, SetWindowLongW)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetClassLongW)
|
||||
WNEF_RESOLVE_WINAPI(User32, SetClassLongW)
|
||||
#endif
|
||||
WNEF_RESOLVE_WINAPI(FindWindowW)
|
||||
WNEF_RESOLVE_WINAPI(MonitorFromWindow)
|
||||
WNEF_RESOLVE_WINAPI(GetMonitorInfoW)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_SYSTEM_LIB_BEGIN(Gdi32)
|
||||
WNEF_RESOLVE_WINAPI(GetDeviceCaps)
|
||||
WNEF_RESOLVE_WINAPI(CreateSolidBrush)
|
||||
WNEF_RESOLVE_WINAPI(DeleteObject)
|
||||
WNEF_RESOLVE_WINAPI(GetStockObject)
|
||||
WNEF_RESOLVE_WINAPI(CreateRectRgnIndirect)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_RESOLVE_WINAPI(User32, FindWindowW)
|
||||
WNEF_RESOLVE_WINAPI(User32, MonitorFromWindow)
|
||||
WNEF_RESOLVE_WINAPI(User32, GetMonitorInfoW)
|
||||
WNEF_RESOLVE_WINAPI(Gdi32, GetDeviceCaps)
|
||||
WNEF_RESOLVE_WINAPI(Gdi32, CreateSolidBrush)
|
||||
WNEF_RESOLVE_WINAPI(Gdi32, DeleteObject)
|
||||
WNEF_RESOLVE_WINAPI(Gdi32, GetStockObject)
|
||||
WNEF_RESOLVE_WINAPI(Gdi32, CreateRectRgnIndirect)
|
||||
// Available since Windows XP.
|
||||
WNEF_SYSTEM_LIB_BEGIN(Shell32)
|
||||
WNEF_RESOLVE_WINAPI(SHAppBarMessage)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_SYSTEM_LIB_BEGIN(Kernel32)
|
||||
WNEF_RESOLVE_WINAPI(GetCurrentProcess)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_RESOLVE_WINAPI(Shell32, SHAppBarMessage)
|
||||
WNEF_RESOLVE_WINAPI(Kernel32, GetCurrentProcess)
|
||||
// Available since Windows Vista.
|
||||
WNEF_SYSTEM_LIB_BEGIN(User32)
|
||||
WNEF_RESOLVE_WINAPI(IsProcessDPIAware)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_SYSTEM_LIB_BEGIN(Dwmapi)
|
||||
WNEF_RESOLVE_WINAPI(DwmGetWindowAttribute)
|
||||
WNEF_RESOLVE_WINAPI(DwmIsCompositionEnabled)
|
||||
WNEF_RESOLVE_WINAPI(DwmExtendFrameIntoClientArea)
|
||||
WNEF_RESOLVE_WINAPI(DwmSetWindowAttribute)
|
||||
WNEF_RESOLVE_WINAPI(DwmDefWindowProc)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_SYSTEM_LIB_BEGIN(UxTheme)
|
||||
WNEF_RESOLVE_WINAPI(IsThemeActive)
|
||||
WNEF_RESOLVE_WINAPI(BufferedPaintSetAlpha)
|
||||
WNEF_RESOLVE_WINAPI(EndBufferedPaint)
|
||||
WNEF_RESOLVE_WINAPI(BeginBufferedPaint)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_RESOLVE_WINAPI(User32, IsProcessDPIAware)
|
||||
WNEF_RESOLVE_WINAPI(Dwmapi, DwmGetWindowAttribute)
|
||||
WNEF_RESOLVE_WINAPI(Dwmapi, DwmIsCompositionEnabled)
|
||||
WNEF_RESOLVE_WINAPI(Dwmapi, DwmExtendFrameIntoClientArea)
|
||||
WNEF_RESOLVE_WINAPI(Dwmapi, DwmSetWindowAttribute)
|
||||
WNEF_RESOLVE_WINAPI(Dwmapi, DwmDefWindowProc)
|
||||
WNEF_RESOLVE_WINAPI(UxTheme, IsThemeActive)
|
||||
WNEF_RESOLVE_WINAPI(UxTheme, BufferedPaintSetAlpha)
|
||||
WNEF_RESOLVE_WINAPI(UxTheme, EndBufferedPaint)
|
||||
WNEF_RESOLVE_WINAPI(UxTheme, BeginBufferedPaint)
|
||||
// Available since Windows 7.
|
||||
#if 0
|
||||
WNEF_SYSTEM_LIB_BEGIN(D2D1)
|
||||
WNEF_RESOLVE_WINAPI(D2D1CreateFactory)
|
||||
WNEF_SYSTEM_LIB_END
|
||||
WNEF_RESOLVE_WINAPI(D2D1, D2D1CreateFactory)
|
||||
#endif
|
||||
loadDPIFunctions();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue