Restore Windows 7 compatibility (#160)
* Call SetProcessDpiAwareness via GetProcAddress to preserve Windows 7 compatibility
Shcore.dll and SetProcessDpiAwareness were introduced in Windows 8 and higher, so to keep compatibility with Windows 7, we use GetProcAddress to call this function dynamically, avoiding linker writing binary dependency on shcore.dll in the import table
* Revert "Call SetProcessDpiAwareness via GetProcAddress to preserve Windows 7 compatibility"
This reverts commit f1f397fdbe.
* Reapply the fix
This commit is contained in:
@@ -707,7 +707,19 @@ void CleanupDevice()
|
|||||||
if( g_pd3dDevice ) g_pd3dDevice->Release();
|
if( g_pd3dDevice ) g_pd3dDevice->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef HRESULT(__stdcall* SetProcessDpiAwareness_f)(PROCESS_DPI_AWARENESS);
|
||||||
|
static HRESULT dyn_SetProcessDpiAwareness(PROCESS_DPI_AWARENESS value)
|
||||||
|
{
|
||||||
|
static const auto ptr = reinterpret_cast<SetProcessDpiAwareness_f>(
|
||||||
|
reinterpret_cast<void*>(::GetProcAddress(static_cast<HMODULE>(LoadLibraryExW(L"Shcore.dll", nullptr, 0)), "SetProcessDpiAwareness")));
|
||||||
|
if (ptr == nullptr)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr(value);
|
||||||
|
}
|
||||||
|
|
||||||
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||||
_In_opt_ HINSTANCE hPrevInstance,
|
_In_opt_ HINSTANCE hPrevInstance,
|
||||||
@@ -717,7 +729,7 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
|||||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||||
|
|
||||||
SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
|
dyn_SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
|
||||||
g_iScreenWidth = GetSystemMetrics(SM_CXSCREEN);
|
g_iScreenWidth = GetSystemMetrics(SM_CXSCREEN);
|
||||||
g_iScreenHeight = GetSystemMetrics(SM_CYSCREEN);
|
g_iScreenHeight = GetSystemMetrics(SM_CYSCREEN);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user