DWORD Position;
HMONITOR Monitor;
+ HMONITOR PreviousMonitor;
DWORD DraggingPosition;
HMONITOR DraggingMonitor;
MONITORINFO mi;
mi.cbSize = sizeof(mi);
- if (!GetMonitorInfo(This->Monitor,
+ if (!GetMonitorInfo(hMonitor,
&mi))
{
/* Hm, the monitor is gone? Try to find a monitor where it
}
}
+static VOID
+ITrayWindowImpl_ResizeWorkArea(IN OUT ITrayWindowImpl *This)
+{
+ RECT rcTray,rcWorkArea;
+
+ /* If monitor has changed then fix the previous monitors work area */
+ if(This->PreviousMonitor!=This->Monitor)
+ {
+ ITrayWindowImpl_GetScreenRect(This,
+ This->PreviousMonitor,
+ &rcWorkArea);
+ SystemParametersInfo(SPI_SETWORKAREA,
+ 1,
+ &rcWorkArea,
+ SPIF_SENDCHANGE);
+ }
+
+ rcTray = This->rcTrayWnd[This->Position];
+
+ ITrayWindowImpl_GetScreenRect(This,
+ This->Monitor,
+ &rcWorkArea);
+ This->PreviousMonitor=This->Monitor;
+
+ /* If AutoHide is false then change the workarea to exclude the area that
+ the taskbar covers. */
+ if(!This->AutoHide)
+ {
+ switch(This->Position)
+ {
+ case ABE_TOP:
+ rcWorkArea.top=rcTray.bottom;
+ break;
+ case ABE_LEFT:
+ rcWorkArea.left=rcTray.right;
+ break;
+ case ABE_RIGHT:
+ rcWorkArea.right=rcTray.left;
+ break;
+ case ABE_BOTTOM:
+ rcWorkArea.bottom=rcTray.top;
+ break;
+ }
+ }
+
+ SystemParametersInfo(SPI_SETWORKAREA,
+ 1,
+ &rcWorkArea,
+ SPIF_SENDCHANGE);
+}
+
static VOID
ITrayWindowImpl_CheckTrayWndPosition(IN OUT ITrayWindowImpl *This)
{
rcTray.bottom - rcTray.top,
SWP_NOZORDER);
+ ITrayWindowImpl_ResizeWorkArea(This);
+
ITrayWindowImpl_ApplyClipping(This,
TRUE);
}
if (wParam == SIZE_RESTORED && lParam == 0)
{
+ ITrayWindowImpl_ResizeWorkArea(This);
/* Clip the tray window on multi monitor systems so the edges can't
overlap into another monitor */
ITrayWindowImpl_ApplyClipping(This,