PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Win32: Wie Fenster auf bestimmtem Screen erstellen?


Chris Lux
2006-06-13, 10:52:52
Hi,
ich möchte aus der Anwendung heraus bestimmen, auf welchem Screen mein App-Window erscheint. Geht das mit Win32 irgendwie? Bisher habe ich keine Möglichkeiten dazu gefunden.

Gast
2006-06-13, 11:06:43
Chris Lux[/POST]']Hi,
ich möchte aus der Anwendung heraus bestimmen, auf welchem Screen mein App-Window erscheint. Geht das mit Win32 irgendwie? Bisher habe ich keine Möglichkeiten dazu gefunden.

Mit Screen meinst du Desktop oder?

Juerg
2006-06-13, 11:29:25
Guggscht Du nach in user32:

EnumDisplayMonitors
GetSystemMetrics

SM_XVIRTUALSCREEN
SM_YVIRTUALSCREEN
SM_CXVIRTUALSCREEN
SM_CYVIRTUALSCREEN
SM_CMONITORS
SM_SAMEDISPLAYFORMAT

und z.B:

Dual / Multiple Monitor Support in Win32
http://msdn.microsoft.com/library/en-us/wcemulti/html/ceconMultipleScreensReference.asp

Chris Lux
2006-06-13, 11:44:29
ich kenne die sachen, aber da sehe ich keine möglichkeit ein fenster direkt auf einem monitor zu erzeugen.

Juerg
2006-06-13, 12:18:57
Szenario:

Du hast zwei Monitore. Beide sind angetrieben mit 1280x1024. Soweit so gut.


Nun:

1.
Ein call nach GetSystemMetrics(SM_CXVIRTUALSCREEN) ergibt eine Virtual Desktop Width von: 2560


2.
Ein callback zu EnumDisplayMonitors ergibt dann:

Mon 1:
struct RECT
left 0
top 0
width 1280
height 1024

Mon 2:
struct RECT
left 1280
top 0
width 1280
height 1024


Wenn Du nun die beide lefts zusammenzählst weisst Du ob die Monitore nebeneinander stehen. Wenn Du beide tops zusammenzählst, weisst Du ob die Monitore aufeinanderstehen.

Das kannst Du dann ebenfalls verwenden um z.B. Deine Anwendung zu platzieren.

Vorsicht. Der (secondary) zweite Monitor muss nicht verfügbar sein! Initializiere den sekundären Monitor immer zu 0 dann wird automatisch deine Anwendung auf dem primären Monitor dargestellt, wenn der zweite nicht verfügbar ist.

Edit: Also z.B. MyApp.left = Mon1.left + Mon2.left

=> Fenster auf dem zweiten Schirm

Wenn Schirm nicht an, dann ist Mon2.left = 0, ergo

=> Fenster auf dem ersten Schirm

Chris Lux
2006-06-13, 13:44:08
ok, danke. ich werde mir das mal genauer ansehen. es wird sicher totales chaos, wenn ich versuche monitor<->device usw korrekt zu machen (SLI-multiview als multipipe system unter windows...)