diff options
-rw-r--r-- | c/common.cpp | 5 | ||||
-rw-r--r-- | c/common.h | 30 | ||||
-rw-r--r-- | c/main.cpp | 6 |
3 files changed, 21 insertions, 20 deletions
diff --git a/c/common.cpp b/c/common.cpp index c04d986..d503133 100644 --- a/c/common.cpp +++ b/c/common.cpp @@ -57,8 +57,3 @@ Library::~Library() { FreeLibrary(m_hModule); } - -void* Library::GetProcAddress(const char* const szProc) -{ - return (void*)::GetProcAddress(m_hModule, szProc); -} @@ -27,23 +27,15 @@ struct Library { Library(const TCHAR* tszLibrary); ~Library(); - void* GetProcAddress(const char* szProc); + template <typename T> T* GetProcAddress(const char* szProc); private: HMODULE m_hModule; }; -inline int Cmp(const int a, const int b) +template <typename T> +T* Library::GetProcAddress(const char* const szProc) { - if (a == b) return 0; - if (a > b) return 1; - return -1; -} - -/* Return integer scaled for current DPI. */ -inline int Dpi(const int i) -{ - extern int g_iDPI; - return MulDiv(i, g_iDPI, 96); + return (T*)(void*)::GetProcAddress(m_hModule, szProc); } /* Create and return an object of type C. If construction fails, @@ -59,4 +51,18 @@ std::optional<C> try_make(T ...args) } } +/* Return integer scaled for current DPI. */ +inline int Dpi(const int i) +{ + extern int g_iDPI; + return MulDiv(i, g_iDPI, 96); +} + +inline int Cmp(const int a, const int b) +{ + if (a == b) return 0; + if (a > b) return 1; + return -1; +} + #endif @@ -156,16 +156,16 @@ static LRESULT CALLBACK CBTProc(const int nCode, const WPARAM wParam, const LPAR /* Look up constants. */ if (auto opLib = try_make<Library>(TEXT("User32.dll"))) - if (auto GetDpiForWindow = (UINT (*)(HWND))opLib->GetProcAddress("GetDpiForWindow")) + if (auto GetDpiForWindow = opLib->GetProcAddress<UINT(HWND)>("GetDpiForWindow")) g_iDPI = GetDpiForWindow(g_hWnd); if (auto opLib = try_make<Library>(TEXT("uxtheme.dll"))) - if (opLib->GetProcAddress("SetWindowTheme")) + if (opLib->GetProcAddress<void>("SetWindowTheme")) g_bThemes = 1; LOGFONT lf; if (auto opLib = try_make<Library>(TEXT("User32.dll"))) { - if (opLib->GetProcAddress("SystemParametersInfo" WA)) { + if (opLib->GetProcAddress<void>("SystemParametersInfo" WA)) { NONCLIENTMETRICS m; m.cbSize = sizeof(NONCLIENTMETRICS); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &m, 0); |