Simplify the code a bit.

Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
Yuhang Zhao 2020-05-06 22:26:57 +08:00
parent f7d9e361f4
commit f3d5f6a0ce
1 changed files with 98 additions and 67 deletions

View File

@ -154,10 +154,19 @@
_WNEF_WINAPI_##funcName m_lp##funcName = nullptr; _WNEF_WINAPI_##funcName m_lp##funcName = nullptr;
#endif #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_WINAPI #ifndef WNEF_RESOLVE_WINAPI
#define WNEF_RESOLVE_WINAPI(libName, funcName) \ #define WNEF_RESOLVE_WINAPI(funcName) \
if (!m_lp##funcName) { \ if (!m_lp##funcName) { \
QLibrary library(QString::fromUtf8(#libName)); \
m_lp##funcName = reinterpret_cast<_WNEF_WINAPI_##funcName>( \ m_lp##funcName = reinterpret_cast<_WNEF_WINAPI_##funcName>( \
library.resolve(#funcName)); \ library.resolve(#funcName)); \
Q_ASSERT_X(m_lp##funcName, __FUNCTION__, \ Q_ASSERT_X(m_lp##funcName, __FUNCTION__, \
@ -334,93 +343,115 @@ void ResolveWin32APIs() {
} }
resolved = true; resolved = true;
// Available since Windows 2000. // Available since Windows 2000.
WNEF_RESOLVE_WINAPI(User32, OffsetRect) WNEF_SYSTEM_LIB_BEGIN(User32)
WNEF_RESOLVE_WINAPI(User32, GetWindowDC) WNEF_RESOLVE_WINAPI(OffsetRect)
WNEF_RESOLVE_WINAPI(User32, GetDCEx) WNEF_RESOLVE_WINAPI(GetWindowDC)
WNEF_RESOLVE_WINAPI(User32, AdjustWindowRectEx) WNEF_RESOLVE_WINAPI(GetDCEx)
WNEF_RESOLVE_WINAPI(User32, EndPaint) WNEF_RESOLVE_WINAPI(AdjustWindowRectEx)
WNEF_RESOLVE_WINAPI(User32, BeginPaint) WNEF_RESOLVE_WINAPI(EndPaint)
WNEF_RESOLVE_WINAPI(User32, FillRect) WNEF_RESOLVE_WINAPI(BeginPaint)
WNEF_RESOLVE_WINAPI(User32, GetWindowInfo) WNEF_RESOLVE_WINAPI(FillRect)
WNEF_RESOLVE_WINAPI(User32, IsWindow) WNEF_RESOLVE_WINAPI(GetWindowInfo)
WNEF_RESOLVE_WINAPI(User32, SetWindowRgn) WNEF_RESOLVE_WINAPI(IsWindow)
WNEF_RESOLVE_WINAPI(User32, InvalidateRect) WNEF_RESOLVE_WINAPI(SetWindowRgn)
WNEF_RESOLVE_WINAPI(User32, UpdateWindow) WNEF_RESOLVE_WINAPI(InvalidateRect)
WNEF_RESOLVE_WINAPI(User32, SetWindowPos) WNEF_RESOLVE_WINAPI(UpdateWindow)
WNEF_RESOLVE_WINAPI(User32, SendMessageW) WNEF_RESOLVE_WINAPI(SetWindowPos)
WNEF_RESOLVE_WINAPI(User32, GetDesktopWindow) WNEF_RESOLVE_WINAPI(SendMessageW)
WNEF_RESOLVE_WINAPI(User32, GetAncestor) WNEF_RESOLVE_WINAPI(GetDesktopWindow)
WNEF_RESOLVE_WINAPI(User32, DefWindowProcW) WNEF_RESOLVE_WINAPI(GetAncestor)
WNEF_RESOLVE_WINAPI(User32, SetLayeredWindowAttributes) WNEF_RESOLVE_WINAPI(DefWindowProcW)
WNEF_RESOLVE_WINAPI(User32, MoveWindow) WNEF_RESOLVE_WINAPI(SetLayeredWindowAttributes)
WNEF_RESOLVE_WINAPI(User32, IsZoomed) WNEF_RESOLVE_WINAPI(MoveWindow)
WNEF_RESOLVE_WINAPI(User32, IsIconic) WNEF_RESOLVE_WINAPI(IsZoomed)
WNEF_RESOLVE_WINAPI(User32, GetSystemMetrics) WNEF_RESOLVE_WINAPI(IsIconic)
WNEF_RESOLVE_WINAPI(User32, GetDC) WNEF_RESOLVE_WINAPI(GetSystemMetrics)
WNEF_RESOLVE_WINAPI(User32, ReleaseDC) WNEF_RESOLVE_WINAPI(GetDC)
WNEF_RESOLVE_WINAPI(User32, RedrawWindow) WNEF_RESOLVE_WINAPI(ReleaseDC)
WNEF_RESOLVE_WINAPI(User32, GetClientRect) WNEF_RESOLVE_WINAPI(RedrawWindow)
WNEF_RESOLVE_WINAPI(User32, GetWindowRect) WNEF_RESOLVE_WINAPI(GetClientRect)
WNEF_RESOLVE_WINAPI(User32, ScreenToClient) WNEF_RESOLVE_WINAPI(GetWindowRect)
WNEF_RESOLVE_WINAPI(User32, EqualRect) WNEF_RESOLVE_WINAPI(ScreenToClient)
WNEF_RESOLVE_WINAPI(EqualRect)
#ifdef Q_PROCESSOR_X86_64 #ifdef Q_PROCESSOR_X86_64
// These functions only exist in 64 bit User32.dll // These functions only exist in 64 bit User32.dll
WNEF_RESOLVE_WINAPI(User32, GetWindowLongPtrW) WNEF_RESOLVE_WINAPI(GetWindowLongPtrW)
WNEF_RESOLVE_WINAPI(User32, SetWindowLongPtrW) WNEF_RESOLVE_WINAPI(SetWindowLongPtrW)
WNEF_RESOLVE_WINAPI(User32, GetClassLongPtrW) WNEF_RESOLVE_WINAPI(GetClassLongPtrW)
WNEF_RESOLVE_WINAPI(User32, SetClassLongPtrW) WNEF_RESOLVE_WINAPI(SetClassLongPtrW)
#else #else
WNEF_RESOLVE_WINAPI(User32, GetWindowLongW) WNEF_RESOLVE_WINAPI(GetWindowLongW)
WNEF_RESOLVE_WINAPI(User32, SetWindowLongW) WNEF_RESOLVE_WINAPI(SetWindowLongW)
WNEF_RESOLVE_WINAPI(User32, GetClassLongW) WNEF_RESOLVE_WINAPI(GetClassLongW)
WNEF_RESOLVE_WINAPI(User32, SetClassLongW) WNEF_RESOLVE_WINAPI(SetClassLongW)
#endif #endif
WNEF_RESOLVE_WINAPI(User32, FindWindowW) WNEF_RESOLVE_WINAPI(FindWindowW)
WNEF_RESOLVE_WINAPI(User32, MonitorFromWindow) WNEF_RESOLVE_WINAPI(MonitorFromWindow)
WNEF_RESOLVE_WINAPI(User32, GetMonitorInfoW) WNEF_RESOLVE_WINAPI(GetMonitorInfoW)
WNEF_RESOLVE_WINAPI(Gdi32, GetDeviceCaps) WNEF_SYSTEM_LIB_END
WNEF_RESOLVE_WINAPI(Gdi32, CreateSolidBrush) WNEF_SYSTEM_LIB_BEGIN(Gdi32)
WNEF_RESOLVE_WINAPI(Gdi32, DeleteObject) WNEF_RESOLVE_WINAPI(GetDeviceCaps)
WNEF_RESOLVE_WINAPI(Gdi32, GetStockObject) WNEF_RESOLVE_WINAPI(CreateSolidBrush)
WNEF_RESOLVE_WINAPI(Gdi32, CreateRectRgnIndirect) WNEF_RESOLVE_WINAPI(DeleteObject)
WNEF_RESOLVE_WINAPI(GetStockObject)
WNEF_RESOLVE_WINAPI(CreateRectRgnIndirect)
WNEF_SYSTEM_LIB_END
// Available since Windows XP. // Available since Windows XP.
WNEF_RESOLVE_WINAPI(Shell32, SHAppBarMessage) WNEF_SYSTEM_LIB_BEGIN(Shell32)
WNEF_RESOLVE_WINAPI(Kernel32, GetCurrentProcess) WNEF_RESOLVE_WINAPI(SHAppBarMessage)
WNEF_SYSTEM_LIB_END
WNEF_SYSTEM_LIB_BEGIN(Kernel32)
WNEF_RESOLVE_WINAPI(GetCurrentProcess)
WNEF_SYSTEM_LIB_END
// Available since Windows Vista. // Available since Windows Vista.
WNEF_RESOLVE_WINAPI(User32, IsProcessDPIAware) WNEF_SYSTEM_LIB_BEGIN(User32)
WNEF_RESOLVE_WINAPI(Dwmapi, DwmGetWindowAttribute) WNEF_RESOLVE_WINAPI(IsProcessDPIAware)
WNEF_RESOLVE_WINAPI(Dwmapi, DwmIsCompositionEnabled) WNEF_SYSTEM_LIB_END
WNEF_RESOLVE_WINAPI(Dwmapi, DwmExtendFrameIntoClientArea) WNEF_SYSTEM_LIB_BEGIN(Dwmapi)
WNEF_RESOLVE_WINAPI(Dwmapi, DwmSetWindowAttribute) WNEF_RESOLVE_WINAPI(DwmGetWindowAttribute)
WNEF_RESOLVE_WINAPI(Dwmapi, DwmDefWindowProc) WNEF_RESOLVE_WINAPI(DwmIsCompositionEnabled)
WNEF_RESOLVE_WINAPI(UxTheme, IsThemeActive) WNEF_RESOLVE_WINAPI(DwmExtendFrameIntoClientArea)
WNEF_RESOLVE_WINAPI(UxTheme, BufferedPaintSetAlpha) WNEF_RESOLVE_WINAPI(DwmSetWindowAttribute)
WNEF_RESOLVE_WINAPI(UxTheme, EndBufferedPaint) WNEF_RESOLVE_WINAPI(DwmDefWindowProc)
WNEF_RESOLVE_WINAPI(UxTheme, BeginBufferedPaint) 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
// Available since Windows 7. // Available since Windows 7.
#if 0 #if 0
WNEF_RESOLVE_WINAPI(D2D1, D2D1CreateFactory) WNEF_SYSTEM_LIB_BEGIN(D2D1)
WNEF_RESOLVE_WINAPI(D2D1CreateFactory)
WNEF_SYSTEM_LIB_END
#endif #endif
// Available since Windows 8.1 // Available since Windows 8.1
if (QOperatingSystemVersion::current() >= if (QOperatingSystemVersion::current() >=
QOperatingSystemVersion::Windows8_1) { QOperatingSystemVersion::Windows8_1) {
WNEF_RESOLVE_WINAPI(SHCore, GetDpiForMonitor) WNEF_SYSTEM_LIB_BEGIN(SHCore)
WNEF_RESOLVE_WINAPI(SHCore, GetProcessDpiAwareness) WNEF_RESOLVE_WINAPI(GetDpiForMonitor)
WNEF_RESOLVE_WINAPI(GetProcessDpiAwareness)
WNEF_SYSTEM_LIB_END
} }
// Available since Windows 10, version 1607 (10.0.14393) // Available since Windows 10, version 1607 (10.0.14393)
if (QOperatingSystemVersion::current() >= if (QOperatingSystemVersion::current() >=
QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0, QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0,
14393)) { 14393)) {
WNEF_RESOLVE_WINAPI(User32, GetDpiForWindow) WNEF_SYSTEM_LIB_BEGIN(User32)
WNEF_RESOLVE_WINAPI(User32, GetDpiForSystem) WNEF_RESOLVE_WINAPI(GetDpiForWindow)
WNEF_RESOLVE_WINAPI(User32, GetSystemMetricsForDpi) WNEF_RESOLVE_WINAPI(GetDpiForSystem)
WNEF_RESOLVE_WINAPI(User32, AdjustWindowRectExForDpi) WNEF_RESOLVE_WINAPI(GetSystemMetricsForDpi)
WNEF_RESOLVE_WINAPI(AdjustWindowRectExForDpi)
WNEF_SYSTEM_LIB_END
} }
// Available since Windows 10, version 1803 (10.0.17134) // Available since Windows 10, version 1803 (10.0.17134)
if (QOperatingSystemVersion::current() >= if (QOperatingSystemVersion::current() >=
QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0, QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0,
17134)) { 17134)) {
WNEF_RESOLVE_WINAPI(User32, GetSystemDpiForProcess) WNEF_SYSTEM_LIB_BEGIN(User32)
WNEF_RESOLVE_WINAPI(GetSystemDpiForProcess)
WNEF_SYSTEM_LIB_END
} }
} }