diff options
author | Filip Gawin <filip.gawin@zoho.com> | 2020-12-29 18:59:40 +0100 |
---|---|---|
committer | Filip Gawin <filip.gawin@zoho.com> | 2020-12-29 18:59:40 +0100 |
commit | a73f5340a2d12537437479317bdf351715991c12 (patch) | |
tree | a971d86ad2f88dbd7503bf2186080c72221d82ca /sdk/dx8sdk/Include/multimon.h | |
parent | More menu error sound fix (diff) | |
download | re3-a73f5340a2d12537437479317bdf351715991c12.tar re3-a73f5340a2d12537437479317bdf351715991c12.tar.gz re3-a73f5340a2d12537437479317bdf351715991c12.tar.bz2 re3-a73f5340a2d12537437479317bdf351715991c12.tar.lz re3-a73f5340a2d12537437479317bdf351715991c12.tar.xz re3-a73f5340a2d12537437479317bdf351715991c12.tar.zst re3-a73f5340a2d12537437479317bdf351715991c12.zip |
Diffstat (limited to 'sdk/dx8sdk/Include/multimon.h')
-rw-r--r-- | sdk/dx8sdk/Include/multimon.h | 484 |
1 files changed, 0 insertions, 484 deletions
diff --git a/sdk/dx8sdk/Include/multimon.h b/sdk/dx8sdk/Include/multimon.h deleted file mode 100644 index 88e2862a..00000000 --- a/sdk/dx8sdk/Include/multimon.h +++ /dev/null @@ -1,484 +0,0 @@ -//============================================================================= -// -// multimon.h -- Stub module that fakes multiple monitor apis on Win32 OSes -// without them. -// -// By using this header your code will get back default values from -// GetSystemMetrics() for new metrics, and the new multimonitor APIs -// will act like only one display is present on a Win32 OS without -// multimonitor APIs. -// -// Exactly one source must include this with COMPILE_MULTIMON_STUBS defined. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -//============================================================================= - -#ifdef __cplusplus -extern "C" { // Assume C declarations for C++ -#endif // __cplusplus - -// -// If we are building with Win95/NT4 headers, we need to declare -// the multimonitor-related metrics and APIs ourselves. -// -#ifndef SM_CMONITORS - -#define SM_XVIRTUALSCREEN 76 -#define SM_YVIRTUALSCREEN 77 -#define SM_CXVIRTUALSCREEN 78 -#define SM_CYVIRTUALSCREEN 79 -#define SM_CMONITORS 80 -#define SM_SAMEDISPLAYFORMAT 81 - -// HMONITOR is already declared if WINVER >= 0x0500 in windef.h -// This is for components built with an older version number. -// -#if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500) -DECLARE_HANDLE(HMONITOR); -#define HMONITOR_DECLARED -#endif - -#define MONITOR_DEFAULTTONULL 0x00000000 -#define MONITOR_DEFAULTTOPRIMARY 0x00000001 -#define MONITOR_DEFAULTTONEAREST 0x00000002 - -#define MONITORINFOF_PRIMARY 0x00000001 - -typedef struct tagMONITORINFO -{ - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; -} MONITORINFO, *LPMONITORINFO; - -#ifndef CCHDEVICENAME -#define CCHDEVICENAME 32 -#endif - -#ifdef __cplusplus -typedef struct tagMONITORINFOEXA : public tagMONITORINFO -{ - CHAR szDevice[CCHDEVICENAME]; -} MONITORINFOEXA, *LPMONITORINFOEXA; -typedef struct tagMONITORINFOEXW : public tagMONITORINFO -{ - WCHAR szDevice[CCHDEVICENAME]; -} MONITORINFOEXW, *LPMONITORINFOEXW; -#ifdef UNICODE -typedef MONITORINFOEXW MONITORINFOEX; -typedef LPMONITORINFOEXW LPMONITORINFOEX; -#else -typedef MONITORINFOEXA MONITORINFOEX; -typedef LPMONITORINFOEXA LPMONITORINFOEX; -#endif // UNICODE -#else // ndef __cplusplus -typedef struct tagMONITORINFOEXA -{ - MONITORINFO; - CHAR szDevice[CCHDEVICENAME]; -} MONITORINFOEXA, *LPMONITORINFOEXA; -typedef struct tagMONITORINFOEXW -{ - MONITORINFO; - WCHAR szDevice[CCHDEVICENAME]; -} MONITORINFOEXW, *LPMONITORINFOEXW; -#ifdef UNICODE -typedef MONITORINFOEXW MONITORINFOEX; -typedef LPMONITORINFOEXW LPMONITORINFOEX; -#else -typedef MONITORINFOEXA MONITORINFOEX; -typedef LPMONITORINFOEXA LPMONITORINFOEX; -#endif // UNICODE -#endif - -typedef BOOL (CALLBACK* MONITORENUMPROC)(HMONITOR, HDC, LPRECT, LPARAM); - -#ifndef DISPLAY_DEVICE_ATTACHED_TO_DESKTOP -typedef struct _DISPLAY_DEVICEA { - DWORD cb; - CHAR DeviceName[32]; - CHAR DeviceString[128]; - DWORD StateFlags; - CHAR DeviceID[128]; - CHAR DeviceKey[128]; -} DISPLAY_DEVICEA, *PDISPLAY_DEVICEA, *LPDISPLAY_DEVICEA; -typedef struct _DISPLAY_DEVICEW { - DWORD cb; - WCHAR DeviceName[32]; - WCHAR DeviceString[128]; - DWORD StateFlags; - WCHAR DeviceID[128]; - WCHAR DeviceKey[128]; -} DISPLAY_DEVICEW, *PDISPLAY_DEVICEW, *LPDISPLAY_DEVICEW; -#ifdef UNICODE -typedef DISPLAY_DEVICEW DISPLAY_DEVICE; -typedef PDISPLAY_DEVICEW PDISPLAY_DEVICE; -typedef LPDISPLAY_DEVICEW LPDISPLAY_DEVICE; -#else -typedef DISPLAY_DEVICEA DISPLAY_DEVICE; -typedef PDISPLAY_DEVICEA PDISPLAY_DEVICE; -typedef LPDISPLAY_DEVICEA LPDISPLAY_DEVICE; -#endif // UNICODE - -#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001 -#define DISPLAY_DEVICE_MULTI_DRIVER 0x00000002 -#define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004 -#define DISPLAY_DEVICE_MIRRORING_DRIVER 0x00000008 -#define DISPLAY_DEVICE_VGA_COMPATIBLE 0x00000010 -#endif - -#endif // SM_CMONITORS - -#undef GetMonitorInfo -#undef GetSystemMetrics -#undef MonitorFromWindow -#undef MonitorFromRect -#undef MonitorFromPoint -#undef EnumDisplayMonitors -#undef EnumDisplayDevices - -// -// Define COMPILE_MULTIMON_STUBS to compile the stubs; -// otherwise, you get the declarations. -// -#ifdef COMPILE_MULTIMON_STUBS - -//----------------------------------------------------------------------------- -// -// Implement the API stubs. -// -//----------------------------------------------------------------------------- - -#ifndef MULTIMON_FNS_DEFINED - -int (WINAPI* g_pfnGetSystemMetrics)(int) = NULL; -HMONITOR (WINAPI* g_pfnMonitorFromWindow)(HWND, DWORD) = NULL; -HMONITOR (WINAPI* g_pfnMonitorFromRect)(LPCRECT, DWORD) = NULL; -HMONITOR (WINAPI* g_pfnMonitorFromPoint)(POINT, DWORD) = NULL; -BOOL (WINAPI* g_pfnGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL; -BOOL (WINAPI* g_pfnEnumDisplayMonitors)(HDC, LPCRECT, MONITORENUMPROC, LPARAM) = NULL; -BOOL (WINAPI* g_pfnEnumDisplayDevices)(PVOID, DWORD, PDISPLAY_DEVICE,DWORD) = NULL; -BOOL g_fMultiMonInitDone = FALSE; -BOOL g_fMultimonPlatformNT = FALSE; - -#endif - -BOOL IsPlatformNT() -{ - OSVERSIONINFOA osvi = {0}; - osvi.dwOSVersionInfoSize = sizeof(osvi); - GetVersionExA((OSVERSIONINFOA*)&osvi); - return (VER_PLATFORM_WIN32_NT == osvi.dwPlatformId); -} - -BOOL InitMultipleMonitorStubs(void) -{ - HMODULE hUser32; - if (g_fMultiMonInitDone) - { - return g_pfnGetMonitorInfo != NULL; - } - - g_fMultimonPlatformNT = IsPlatformNT(); - hUser32 = GetModuleHandle(TEXT("USER32")); - if (hUser32 && - (*(FARPROC*)&g_pfnGetSystemMetrics = GetProcAddress(hUser32,"GetSystemMetrics")) != NULL && - (*(FARPROC*)&g_pfnMonitorFromWindow = GetProcAddress(hUser32,"MonitorFromWindow")) != NULL && - (*(FARPROC*)&g_pfnMonitorFromRect = GetProcAddress(hUser32,"MonitorFromRect")) != NULL && - (*(FARPROC*)&g_pfnMonitorFromPoint = GetProcAddress(hUser32,"MonitorFromPoint")) != NULL && - (*(FARPROC*)&g_pfnEnumDisplayMonitors = GetProcAddress(hUser32,"EnumDisplayMonitors")) != NULL && -#ifdef UNICODE - (*(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress(hUser32,"EnumDisplayDevicesW")) != NULL && - (*(FARPROC*)&g_pfnGetMonitorInfo = g_fMultimonPlatformNT ? GetProcAddress(hUser32,"GetMonitorInfoW") : - GetProcAddress(hUser32,"GetMonitorInfoA")) != NULL -#else - (*(FARPROC*)&g_pfnGetMonitorInfo = GetProcAddress(hUser32,"GetMonitorInfoA")) != NULL && - (*(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress(hUser32,"EnumDisplayDevicesA")) != NULL -#endif - ) { - g_fMultiMonInitDone = TRUE; - return TRUE; - } - else - { - g_pfnGetSystemMetrics = NULL; - g_pfnMonitorFromWindow = NULL; - g_pfnMonitorFromRect = NULL; - g_pfnMonitorFromPoint = NULL; - g_pfnGetMonitorInfo = NULL; - g_pfnEnumDisplayMonitors = NULL; - g_pfnEnumDisplayDevices = NULL; - - g_fMultiMonInitDone = TRUE; - return FALSE; - } -} - -//----------------------------------------------------------------------------- -// -// fake implementations of Monitor APIs that work with the primary display -// no special parameter validation is made since these run in client code -// -//----------------------------------------------------------------------------- - -int WINAPI -xGetSystemMetrics(int nIndex) -{ - if (InitMultipleMonitorStubs()) - return g_pfnGetSystemMetrics(nIndex); - - switch (nIndex) - { - case SM_CMONITORS: - case SM_SAMEDISPLAYFORMAT: - return 1; - - case SM_XVIRTUALSCREEN: - case SM_YVIRTUALSCREEN: - return 0; - - case SM_CXVIRTUALSCREEN: - nIndex = SM_CXSCREEN; - break; - - case SM_CYVIRTUALSCREEN: - nIndex = SM_CYSCREEN; - break; - } - - return GetSystemMetrics(nIndex); -} - -#define xPRIMARY_MONITOR ((HMONITOR)0x12340042) - -HMONITOR WINAPI -xMonitorFromPoint(POINT ptScreenCoords, DWORD dwFlags) -{ - if (InitMultipleMonitorStubs()) - return g_pfnMonitorFromPoint(ptScreenCoords, dwFlags); - - if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) || - ((ptScreenCoords.x >= 0) && - (ptScreenCoords.x < GetSystemMetrics(SM_CXSCREEN)) && - (ptScreenCoords.y >= 0) && - (ptScreenCoords.y < GetSystemMetrics(SM_CYSCREEN)))) - { - return xPRIMARY_MONITOR; - } - - return NULL; -} - -HMONITOR WINAPI -xMonitorFromRect(LPCRECT lprcScreenCoords, DWORD dwFlags) -{ - if (InitMultipleMonitorStubs()) - return g_pfnMonitorFromRect(lprcScreenCoords, dwFlags); - - if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) || - ((lprcScreenCoords->right > 0) && - (lprcScreenCoords->bottom > 0) && - (lprcScreenCoords->left < GetSystemMetrics(SM_CXSCREEN)) && - (lprcScreenCoords->top < GetSystemMetrics(SM_CYSCREEN)))) - { - return xPRIMARY_MONITOR; - } - - return NULL; -} - -HMONITOR WINAPI -xMonitorFromWindow(HWND hWnd, DWORD dwFlags) -{ - WINDOWPLACEMENT wp; - - if (InitMultipleMonitorStubs()) - return g_pfnMonitorFromWindow(hWnd, dwFlags); - - if (dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) - return xPRIMARY_MONITOR; - - if (IsIconic(hWnd) ? - GetWindowPlacement(hWnd, &wp) : - GetWindowRect(hWnd, &wp.rcNormalPosition)) { - - return xMonitorFromRect(&wp.rcNormalPosition, dwFlags); - } - - return NULL; -} - -BOOL WINAPI -xGetMonitorInfo(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo) -{ - RECT rcWork; - - if (InitMultipleMonitorStubs()) - { - BOOL f = g_pfnGetMonitorInfo(hMonitor, lpMonitorInfo); -#ifdef UNICODE - if (f && !g_fMultimonPlatformNT && (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEX))) - { - MultiByteToWideChar(CP_ACP, 0, - (LPSTR)((MONITORINFOEX*)lpMonitorInfo)->szDevice, -1, - ((MONITORINFOEX*)lpMonitorInfo)->szDevice, (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR))); - } -#endif - return f; - } - - if ((hMonitor == xPRIMARY_MONITOR) && - lpMonitorInfo && - (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) && - SystemParametersInfoA(SPI_GETWORKAREA, 0, &rcWork, 0)) - { - lpMonitorInfo->rcMonitor.left = 0; - lpMonitorInfo->rcMonitor.top = 0; - lpMonitorInfo->rcMonitor.right = GetSystemMetrics(SM_CXSCREEN); - lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics(SM_CYSCREEN); - lpMonitorInfo->rcWork = rcWork; - lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; - - if (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEX)) - { -#ifdef UNICODE - MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, ((MONITORINFOEX*)lpMonitorInfo)->szDevice, (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR))); -#else // UNICODE - lstrcpy(((MONITORINFOEX*)lpMonitorInfo)->szDevice, TEXT("DISPLAY")); -#endif // UNICODE - } - - return TRUE; - } - - return FALSE; -} - -BOOL WINAPI -xEnumDisplayMonitors( - HDC hdcOptionalForPainting, - LPCRECT lprcEnumMonitorsThatIntersect, - MONITORENUMPROC lpfnEnumProc, - LPARAM dwData) -{ - RECT rcLimit; - - if (InitMultipleMonitorStubs()) { - return g_pfnEnumDisplayMonitors( - hdcOptionalForPainting, - lprcEnumMonitorsThatIntersect, - lpfnEnumProc, - dwData); - } - - if (!lpfnEnumProc) - return FALSE; - - rcLimit.left = 0; - rcLimit.top = 0; - rcLimit.right = GetSystemMetrics(SM_CXSCREEN); - rcLimit.bottom = GetSystemMetrics(SM_CYSCREEN); - - if (hdcOptionalForPainting) - { - RECT rcClip; - POINT ptOrg; - - switch (GetClipBox(hdcOptionalForPainting, &rcClip)) - { - default: - if (!GetDCOrgEx(hdcOptionalForPainting, &ptOrg)) - return FALSE; - - OffsetRect(&rcLimit, -ptOrg.x, -ptOrg.y); - if (IntersectRect(&rcLimit, &rcLimit, &rcClip) && - (!lprcEnumMonitorsThatIntersect || - IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect))) { - - break; - } - //fall thru - case NULLREGION: - return TRUE; - case ERROR: - return FALSE; - } - } else { - if ( lprcEnumMonitorsThatIntersect && - !IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect)) { - - return TRUE; - } - } - - return lpfnEnumProc( - xPRIMARY_MONITOR, - hdcOptionalForPainting, - &rcLimit, - dwData); -} - -BOOL WINAPI -xEnumDisplayDevices( - PVOID Unused, - DWORD iDevNum, - PDISPLAY_DEVICE lpDisplayDevice, - DWORD dwFlags) -{ - if (InitMultipleMonitorStubs()) - return g_pfnEnumDisplayDevices(Unused, iDevNum, lpDisplayDevice, dwFlags); - - if (Unused != NULL) - return FALSE; - - if (iDevNum != 0) - return FALSE; - - if (lpDisplayDevice == NULL || lpDisplayDevice->cb < sizeof(DISPLAY_DEVICE)) - return FALSE; - -#ifdef UNICODE - MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, lpDisplayDevice->DeviceName, (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR))); - MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, lpDisplayDevice->DeviceString, (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR))); -#else // UNICODE - lstrcpy((LPTSTR)lpDisplayDevice->DeviceName, TEXT("DISPLAY")); - lstrcpy((LPTSTR)lpDisplayDevice->DeviceString, TEXT("DISPLAY")); -#endif // UNICODE - - lpDisplayDevice->StateFlags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE; - - return TRUE; -} - -#undef xPRIMARY_MONITOR -#undef COMPILE_MULTIMON_STUBS - -#else // COMPILE_MULTIMON_STUBS - -extern int WINAPI xGetSystemMetrics(int); -extern HMONITOR WINAPI xMonitorFromWindow(HWND, DWORD); -extern HMONITOR WINAPI xMonitorFromRect(LPCRECT, DWORD); -extern HMONITOR WINAPI xMonitorFromPoint(POINT, DWORD); -extern BOOL WINAPI xGetMonitorInfo(HMONITOR, LPMONITORINFO); -extern BOOL WINAPI xEnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM); -extern BOOL WINAPI xEnumDisplayDevices(PVOID, DWORD, PDISPLAY_DEVICE, DWORD); - -#endif // COMPILE_MULTIMON_STUBS - -// -// build defines that replace the regular APIs with our versions -// -#define GetSystemMetrics xGetSystemMetrics -#define MonitorFromWindow xMonitorFromWindow -#define MonitorFromRect xMonitorFromRect -#define MonitorFromPoint xMonitorFromPoint -#define GetMonitorInfo xGetMonitorInfo -#define EnumDisplayMonitors xEnumDisplayMonitors -#define EnumDisplayDevices xEnumDisplayDevices - -#ifdef __cplusplus -} -#endif // __cplusplus - |