Hi Marten,
I think this isn't supported, yet.
But nothing is impssible at VASmalltalk
I think you might have to extend VAST a little.
There are several C++ / OpenGL tutorials on the web, which explain how to open a Widget on the second display.
I think you might need to add the following Plattformfunctions and OSObjects to VAST.
EnumDisplayMonitors()
MonitorEnumProc()
GetMonitorInfo()
For the GetMonitorInfo()-call you might be able to use the already existing classes OSMonitorInfo1 and 2. Have a look at OsDevmode on how to use them.
C++ Sample:
MONITORINFOEX monitorinfo;
monitorinfo.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo( hMonitor, &monitorinfo );
long x, y, width, height;
x = monitorinfo.rcMonitor.left;
y = monitorinfo.rcMonitor.top;
width = monitorinfo.rcMonitor.right - monitorinfo.rcMonitor.left;
height = monitorinfo.rcMonitor.bottom - monitorinfo.rcMonitor.top;
HWND hWnd = CreateWindow( classname, monitorinfo.szDevice,
WS_POPUP|WS_VISIBLE,
x, y, width, height,
NULL,
NULL,
hInstance,
NULL);
Here's an example on how to swith the resolution of your screen. It uses the OSDevMode for this.
|devmodePtr |
devmodePtr := OsDevMode new
dmSize: self class fixedSize;
dmDriverExtra: 0.
"Getting the actual devMode to be changed and set later on."
OS
enumDisplaySettings: nil
iModeNum: -1 "get current mode"
lpDevMode: devmodePtr.
"You could alsocollect all available devmodes on you system by iterating from 1 to xyz changing the iModeNum until the OSCall returns false.
Using the devmode you desire calling the changeDisplaySettings"
"Changing the resolution values"
devmodePtr
dmPelsWidth: 800;
dmPersHeight: 600;
dmFields: DmPelswidth|DmPelsheight|DmBitsperpel|DmDisplayfrequency.
(devmodePtr changeDisplaySettings: CdsTest) ~= 0 ifTrue:[^self error: 'Wasn't able to change the Devmode'].
devmodePtr changeDisplaySettings: CdsFullscreen.
I think using MonitorInfo might work like this, too.
CreateDC should then also be done on the handle of your second monitor.
Well, a lot to do, but not impossible
Cheers!
Sebastian