How do I get the dimensions (RECT) of all the screens in win32 API?

前端 未结 3 576
北海茫月
北海茫月 2021-01-13 06:06

I\'m writing an application for the testing team. What this application does is it lets you take a screenshot of any part of the screen (and then it uploads it to testing te

相关标签:
3条回答
  • 2021-01-13 06:25

    Refer to MSDN for detail about working with multiple monitors:

    Multiple Display Monitors

    Virtual Screen

    Multiple Monitor System Metrics

    You can use GetSystemMetrics() with the SM_XVIRTUALSCREEN, SM_YVIRTUALSCREEN, SM_CXVIRTUALSCREEN, and SM_CYVIRTUALSCREEN metrics to retrieve the rectangle of the entire virtual screen that contains all of the physical screens.

    0 讨论(0)
  • 2021-01-13 06:35

    No, that is a bug. Negative coordinates are part of the design, if a user moves a monitor beyond the 0,0 (top, left) point of the primary monitor, this is acceptable, and thus negative coordinates will be applicable for the monitor that was moved beyond left and top of the primary monitor bounding rectangle. The 0,0 primary point is not a virtual screen coordinate reference.

    0 讨论(0)
  • 2021-01-13 06:38

    You can use the EnumDisplayMonitors function for this. Here's a little class that automatically builds a vector of all monitors in the system, as well as a union of them all.

    struct MonitorRects
    {
        std::vector<RECT>   rcMonitors;
        RECT                rcCombined;
    
        static BOOL CALLBACK MonitorEnum(HMONITOR hMon,HDC hdc,LPRECT lprcMonitor,LPARAM pData)
        {
            MonitorRects* pThis = reinterpret_cast<MonitorRects*>(pData);
            pThis->rcMonitors.push_back(*lprcMonitor);
            UnionRect(&pThis->rcCombined, &pThis->rcCombined, lprcMonitor);
            return TRUE;
        }
    
        MonitorRects()
        {
            SetRectEmpty(&rcCombined);
            EnumDisplayMonitors(0, 0, MonitorEnum, (LPARAM)this);
        }
    };
    

    If you just create one big window using the rcCombined rectangle from that, it will overlay all the screens and the "missing" bits will just be clipped out automatically by the system.

    0 讨论(0)
提交回复
热议问题