6
votes

Comment obtenez-vous Creewindowex () pour créer la fenêtre sur un moniteur spécifique?

J'ai déterminé que je peux utiliser getSystemmetrics (sm_cmoniteurs) pour interroger le nombre de moniteurs ci-joints, mais y a-t-il un moyen de contrôler quel moniteur createwindowex () utilise Pour la fenêtre?


0 commentaires

3 Réponses :


10
votes

Oui, par les arguments "x" et "y". Utilisez Enumdisplaymoniteurs (passez deux nuls) pour énumérer les moniteurs. Votre rappel de moniteurProc est un rectangle d'affichage du moniteur. Vous obtiendrez un rectHright négatif si un moniteur est situé à gauche de votre principal.


0 commentaires

5
votes

Chaque moniteur affiche simplement une partie du bureau, de sorte que la fenêtre sur un moniteur particulier consiste à déplacer la fenêtre sur la partie du bureau affichée par ce moniteur. Lorsque vous appelez Createwindowex (ou Createwindow), vous pouvez spécifier des coordonnées X et Y pour la fenêtre, ce qui l'affichage sur un moniteur particulier signifie simplement spécifier des coordonnées qui tombent dans la zone affichée par ce moniteur.

Vous pouvez trouver les zones de travail pour les moniteurs sur un système avec GetMonitorInfo.


0 commentaires

0
votes

Les paramètres X et Y spécifient l'emplacement de la nouvelle fenêtre. Ce point peut être n'importe où sur l'écran virtuel (tous les rectangles de moniteur combinés).

Si vous souhaitez créer la fenêtre sur le même moniteur comme une autre fenêtre, vous pouvez appeler moniteurfromwindow . Sinon peut énumérer tous les moniteurs avec EnumdisplayMonitors .

De toute façon, une fois que vous avez une poignée HMonitor, vous devez alors appeler GetMonitorInfo . Vos paramètres X et Y devraient être une valeur à l'intérieur des limites du membre RCWork dans la structure d'informations du moniteur. Vous choisiriez normalement des valeurs qui met votre fenêtre au centre de ce rectangle.

Il est important d'utiliser le rectangle de Workarea et non le rectangle de moniteur complet, car vous ne voulez pas que votre fenêtre apparaisse sous la barre des tâches et d'autres AppBars toujours sur le dessus.


0 commentaires