Display on the second monitorTag(s): WinAPI/Registry
When you have more than one screen attached to a PC, one possible configuration is to see the dual monitors setup as a virtual desktop.

First you need to this API to detect if more than one monitor is present.
[local external function definition] FUNCTION Integer GetSystemMetrics (Integer nIndex) LIBRARY "user32.dll"
integer SM_CMONITORS = 80 environment myEnv IF GetSystemMetrics(SM_CMONITORS)> 1 THEN GetEnvironment(myEnv) // display on the secondary monitor (right to primary monitor!) this.x = PixelsToUnits(myEnv.ScreenWidth, XPixelsToUnits!) this.y = 0 END IF
[local external function definition]
FUNCTION Long MonitorFromWindow (Long hwnd, Long dwFlags) LIBRARY "user32"
FUNCTION Long GetMonitorInfo (long hMonitor, ref tagmonitorinfo moninfo) &
LIBRARY "user32" ALIAS FOR "GetMonitorInfoA"
We position the window on the second monitor. We call the MonitorFromWindow API to get an identifer for the monitor as seen by Windows.
Then with the identifier, we call another API to the associated screen resolution.
integer SM_CMONITORS = 80
integer MONITOR_DEFAULTTONULL = 0
IF GetSystemMetrics(SM_CMONITORS)> 1 THEN
environment myEnv
long monitor
tagmonitorinfo tmi
int x1
int y1
GetEnvironment(myEnv)
// move to the second monitor (right to primary monitor!)
this.x = PixelsToUnits(myEnv.ScreenWidth, XPixelsToUnits!)
this.y = 0
// get the resolution of the second monitor
monitor = MonitorFromWindow(Handle(w_yop), MONITOR_DEFAULTTONULL)
IF NOT isNull(monitor) THEN
tmi.cbSize = 72 // size in bytes of TAGMONITORINFO
GetMonitorInfo(monitor, tmi);
// the resolution
x1 = tmi.rcMonitor.right - tmi.rcMonitor.left;
y1 = tmi.rcMonitor.bottom - tmi.rcMonitor.top;
// display center on the secondary monitor (right to primary monitor!)
this.X = PixelsToUnits(myEnv.ScreenWidth, XPixelsToUnits!) + &
(( PixelsToUnits(x1, XPixelsToUnits!) - this.Width ) / 2)
this.Y = ( PixelsToUnits( y1, YPixelsToUnits! ) - this.Height ) /2
END IF
END IF
integer SM_CMONITORS = 80
integer MONITOR_DEFAULTTONULL = 0
IF GetSystemMetrics(SM_CMONITORS)> 1 THEN
environment myEnv
long monitor
tagmonitorinfo tmi
int x1
int y1
GetEnvironment(myEnv)
// move to the second monitor (left to primary monitor)
this.x = -1 * (this.Width)
this.y = 0
// get the resolution of the second monitor
monitor = MonitorFromWindow(Handle(w_yop), MONITOR_DEFAULTTONULL)
IF NOT isNull(monitor) THEN
tmi.cbSize = 72 // size in bytes of TAGMONITORINFO
GetMonitorInfo(monitor, tmi);
// the resolution
x1 = tmi.rcMonitor.right - tmi.rcMonitor.left;
y1 = tmi.rcMonitor.bottom - tmi.rcMonitor.top;
// display center on the secondary monitor (left to primary monitor!)
this.X = -1 * ( PixelsToUnits(x1, XPixelsToUnits!) - &
(PixelsToUnits(x1, XPixelsToUnits!) - this.Width ) / 2)
this.Y = ( PixelsToUnits( y1, YPixelsToUnits! ) - this.Height ) /2
END IF
END IF
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com