diff --git a/src/win32_monitor.c b/src/win32_monitor.c index 06e0e0cf3..1509c9520 100644 --- a/src/win32_monitor.c +++ b/src/win32_monitor.c @@ -291,6 +291,36 @@ void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) *ypos = settings.dmPosition.y; } +static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) +{ + RECT *workarea = (RECT *)dwData; + MONITORINFO monitorInfo; + GetMonitorInfo(hMonitor, &monitorInfo); + workarea->left = monitorInfo.rcWork.left; + workarea->top = monitorInfo.rcWork.top; + workarea->right = monitorInfo.rcWork.right; + workarea->bottom = monitorInfo.rcWork.bottom; + return TRUE; +} + +void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* xpos, int* ypos, int *width, int *height) +{ + HDC dc; + RECT workarea; + + dc = CreateDCW(L"DISPLAY", monitor->win32.adapterName, NULL, NULL); + + if (!EnumDisplayMonitors(dc, NULL, MonitorEnumProc, (LPARAM)&workarea)) + return; + + DeleteDC(dc); + + *xpos = workarea.left; + *ypos = workarea.top; + *width = workarea.right; + *height = workarea.bottom; +} + GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count) { int modeIndex = 0, size = 0;