4 * Copyright 1998 Turchanov Sergey
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 #include "wine/unicode.h"
29 /**********************************************************************/
31 #define xPRIMARY_MONITOR ((HMONITOR)0x12340042)
33 /***********************************************************************
34 * MonitorFromPoint (USER32.@)
36 HMONITOR WINAPI
MonitorFromPoint(POINT ptScreenCoords
, DWORD dwFlags
)
38 if ((dwFlags
& (MONITOR_DEFAULTTOPRIMARY
| MONITOR_DEFAULTTONEAREST
)) ||
39 ((ptScreenCoords
.x
>= 0) &&
40 (ptScreenCoords
.x
< GetSystemMetrics(SM_CXSCREEN
)) &&
41 (ptScreenCoords
.y
>= 0) &&
42 (ptScreenCoords
.y
< GetSystemMetrics(SM_CYSCREEN
))))
44 return xPRIMARY_MONITOR
;
49 /***********************************************************************
50 * MonitorFromRect (USER32.@)
52 HMONITOR WINAPI
MonitorFromRect(LPRECT lprcScreenCoords
, DWORD dwFlags
)
54 if ((dwFlags
& (MONITOR_DEFAULTTOPRIMARY
| MONITOR_DEFAULTTONEAREST
)) ||
55 ((lprcScreenCoords
->right
> 0) &&
56 (lprcScreenCoords
->bottom
> 0) &&
57 (lprcScreenCoords
->left
< GetSystemMetrics(SM_CXSCREEN
)) &&
58 (lprcScreenCoords
->top
< GetSystemMetrics(SM_CYSCREEN
))))
60 return xPRIMARY_MONITOR
;
65 /***********************************************************************
66 * MonitorFromWindow (USER32.@)
68 HMONITOR WINAPI
MonitorFromWindow(HWND hWnd
, DWORD dwFlags
)
72 if (dwFlags
& (MONITOR_DEFAULTTOPRIMARY
| MONITOR_DEFAULTTONEAREST
))
73 return xPRIMARY_MONITOR
;
76 GetWindowPlacement(hWnd
, &wp
) :
77 GetWindowRect(hWnd
, &wp
.rcNormalPosition
)) {
79 return MonitorFromRect(&wp
.rcNormalPosition
, dwFlags
);
85 /***********************************************************************
86 * GetMonitorInfoA (USER32.@)
88 BOOL WINAPI
GetMonitorInfoA(HMONITOR hMonitor
, LPMONITORINFO lpMonitorInfo
)
92 if ((hMonitor
== xPRIMARY_MONITOR
) &&
94 (lpMonitorInfo
->cbSize
>= sizeof(MONITORINFO
)) &&
95 SystemParametersInfoA(SPI_GETWORKAREA
, 0, &rcWork
, 0))
97 SetRect( &lpMonitorInfo
->rcMonitor
, 0, 0,
98 GetSystemMetrics(SM_CXSCREEN
),
99 GetSystemMetrics(SM_CYSCREEN
) );
100 lpMonitorInfo
->rcWork
= rcWork
;
101 lpMonitorInfo
->dwFlags
= MONITORINFOF_PRIMARY
;
103 if (lpMonitorInfo
->cbSize
>= sizeof(MONITORINFOEXA
))
104 strcpy(((MONITORINFOEXA
*)lpMonitorInfo
)->szDevice
, "DISPLAY");
112 /***********************************************************************
113 * GetMonitorInfoW (USER32.@)
115 BOOL WINAPI
GetMonitorInfoW(HMONITOR hMonitor
, LPMONITORINFO lpMonitorInfo
)
119 if ((hMonitor
== xPRIMARY_MONITOR
) &&
121 (lpMonitorInfo
->cbSize
>= sizeof(MONITORINFO
)) &&
122 SystemParametersInfoW(SPI_GETWORKAREA
, 0, &rcWork
, 0))
124 SetRect( &lpMonitorInfo
->rcMonitor
, 0, 0,
125 GetSystemMetrics(SM_CXSCREEN
),
126 GetSystemMetrics(SM_CYSCREEN
) );
127 lpMonitorInfo
->rcWork
= rcWork
;
128 lpMonitorInfo
->dwFlags
= MONITORINFOF_PRIMARY
;
130 if (lpMonitorInfo
->cbSize
>= sizeof(MONITORINFOEXW
))
131 strcpyW(((MONITORINFOEXW
*)lpMonitorInfo
)->szDevice
, (LPCWSTR
)"D\0I\0S\0P\0L\0A\0Y\0\0");
139 /***********************************************************************
140 * EnumDisplayMonitors (USER32.@)
142 BOOL WINAPI
EnumDisplayMonitors(
143 HDC hdcOptionalForPainting
,
144 LPRECT lprcEnumMonitorsThatIntersect
,
145 MONITORENUMPROC lpfnEnumProc
,
149 SetRect( &rcLimit
, 0, 0, GetSystemMetrics(SM_CXSCREEN
),
150 GetSystemMetrics(SM_CYSCREEN
) );
155 if (hdcOptionalForPainting
)
160 switch (GetClipBox(hdcOptionalForPainting
, &rcClip
))
163 if (!GetDCOrgEx(hdcOptionalForPainting
, &ptOrg
))
166 OffsetRect(&rcLimit
, -ptOrg
.x
, -ptOrg
.y
);
167 if (IntersectRect(&rcLimit
, &rcLimit
, &rcClip
) &&
168 (!lprcEnumMonitorsThatIntersect
||
169 IntersectRect(&rcLimit
, &rcLimit
, lprcEnumMonitorsThatIntersect
))) {
180 if ( lprcEnumMonitorsThatIntersect
&&
181 !IntersectRect(&rcLimit
, &rcLimit
, lprcEnumMonitorsThatIntersect
)) {
189 hdcOptionalForPainting
,