示例#1
0
void get_mon_rect(HMONITOR hMon, RECT *r)
{
	if (hMon)
	{
		MONITORINFO mi;
		mi.cbSize = sizeof(mi);
		if (pGetMonitorInfoA(hMon, &mi))
		{
			*r = mi.rcMonitor;
			//*r = mi.rcWork;
			return;
		}
	}
	//SystemParametersInfo(SPI_GETWORKAREA, 0, r, 0);
	r->top = r->left = 0;
	r->right = GetSystemMetrics(SM_CXSCREEN);
	r->bottom = GetSystemMetrics(SM_CYSCREEN);
}
示例#2
0
void get_workarea (HWND hwnd, RECT * w, RECT * s)
{
    static HMONITOR (WINAPI *pMonitorFromWindow)(HWND hwnd, DWORD dwFlags);
    static BOOL     (WINAPI *pGetMonitorInfoA)(HMONITOR hMonitor, LPMONITORINFO lpmi);

    if (NULL == pMonitorFromWindow)
    {
        HMODULE hUserDll = GetModuleHandle("USER32.DLL");
        *(FARPROC*)&pMonitorFromWindow = GetProcAddress(hUserDll, "MonitorFromWindow" );
        *(FARPROC*)&pGetMonitorInfoA = GetProcAddress(hUserDll, "GetMonitorInfoA"   );
        if (NULL == pMonitorFromWindow) *(DWORD*)&pMonitorFromWindow = 1;
    }

    if (*(DWORD*)&pMonitorFromWindow > 1)
    {
        MONITORINFO mi; mi.cbSize = sizeof(mi);
        HMONITOR hMon = pMonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
        if (hMon && pGetMonitorInfoA(hMon, &mi))
        {
            if (w) *w = mi.rcWork;
            if (s) *s = mi.rcMonitor;
            return;
        }
    }

    if (w)
    {
        SystemParametersInfo(SPI_GETWORKAREA, 0, w, 0);
    }

    if (s)
    {
        s->left = s->top = 0;
        s->right = GetSystemMetrics(SM_CXSCREEN);
        s->bottom = GetSystemMetrics(SM_CYSCREEN);
    }
}