From cde78bc8c503eb0bb51a7c81cd0137d34e7572e9 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 18 Sep 2019 08:15:17 -0700 Subject: [PATCH] Made DPI dynamic to fix errors where running on Win7 failed --- BeefySysLib/platform/win/WinBFApp.cpp | 17 +++++++++++++++++ BeefySysLib/platform/win/WinBFApp.h | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/BeefySysLib/platform/win/WinBFApp.cpp b/BeefySysLib/platform/win/WinBFApp.cpp index c2c1d976..3afcca0c 100644 --- a/BeefySysLib/platform/win/WinBFApp.cpp +++ b/BeefySysLib/platform/win/WinBFApp.cpp @@ -1016,12 +1016,22 @@ static int WinBFReportHook( int reportType, char *message, int *returnValue ) extern HINSTANCE gDLLInstance; +typedef UINT(NTAPI *GetDpiForWindow_t)(HWND); +static GetDpiForWindow_t gGetDpiForWindow = NULL; +static HMODULE gUserDll = NULL; + WinBFApp::WinBFApp() { #ifndef BF_MINGW //_CrtSetReportHook(WinBFReportHook); #endif + if (gUserDll == NULL) + { + gUserDll = ::LoadLibraryA("user32.dll"); + gGetDpiForWindow = (GetDpiForWindow_t)::GetProcAddress(gUserDll, "GetDpiForWindow"); + } + mRunning = false; mRenderDevice = NULL; @@ -1341,6 +1351,13 @@ bool WinBFWindow::IsMouseCaptured() return (mHWnd != NULL) && (GetCapture() == mHWnd); } +int WinBFWindow::GetDPI() +{ + if (gGetDpiForWindow != NULL) + return (int)gGetDpiForWindow(mHWnd); + return 96; // Default DPI +} + uint32 WinBFApp::GetClipboardFormat(const StringImpl& format) { if (format == "text") diff --git a/BeefySysLib/platform/win/WinBFApp.h b/BeefySysLib/platform/win/WinBFApp.h index c3984d94..8282578a 100644 --- a/BeefySysLib/platform/win/WinBFApp.h +++ b/BeefySysLib/platform/win/WinBFApp.h @@ -75,7 +75,7 @@ public: virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) override; virtual void CaptureMouse() override; virtual bool IsMouseCaptured() override; - virtual int GetDPI() { return ::GetDpiForWindow(mHWnd); } + virtual int GetDPI() override; // { return ::GetDpiForWindow(mHWnd); } virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) override; virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) override;