Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Okno lub menu, które znajduje się na więcej niż jednym monitorze, powoduje zakłócenia wizualne dla przeglądarki. Aby zminimalizować ten problem, system wyświetla menu i nowe i zmaksymalizowane okna na jednym monitorze. W poniższej tabeli przedstawiono sposób wybierania monitora.
| Obiekt | Lokalizacja |
|---|---|
| okno |
CreateWindow(Ex) wyświetla okno na monitorze zawierającym największą część okna. Maksymalizuje na monitorze, który zawiera największą część okna, zanim zostało zminimalizowane. Kombinacja klawiszy ALT-TAB wyświetla na monitorze okno zawierające aktualnie aktywne okno. |
| okno należące do użytkownika | na tym samym monitorze co jego właściciel. |
| podmenu | Pojawia się na monitorze zawierającym największą część odpowiedniego elementu menu. |
| menu kontekstowe | Pojawia się na monitorze, w którym wystąpiło kliknięcie prawym przyciskiem myszy. |
| lista rozwijana | Pojawia się na monitorze zawierającym prostokąt pola kombi. |
| Okno dialogowe | Pojawia się na monitorze okna, które jest jego właścicielem. Jeśli jest on zdefiniowany przy użyciu stylu DS_CENTERMOUSE, pojawia się na monitorze za pomocą myszy. Jeśli nie ma właściciela, a aktywne okno oraz okno dialogowe znajdują się w tej samej aplikacji, okno dialogowe zostanie wyświetlone na monitorze aktualnie aktywnego okna. Jeśli okno dialogowe nie ma właściciela, a aktywne okno nie znajduje się w tej samej aplikacji co okno dialogowe, okno dialogowe zostanie wyświetlone na monitorze podstawowym. |
| okno komunikatu | Pojawia się na monitorze okna, które jest jego właścicielem. |
Jeśli okno obejmuje dwa monitory i jeden z monitorów jest przenoszony, system umieszcza okno na monitorze, na którym znajduje się największa część oryginalnego okna.
Aplikacja zazwyczaj musi również umieszczać obiekty. Na przykład może być konieczne utworzenie okna na tym samym monitorze co inne okno.
Aby umieścić obiekt w systemie wielu monitorów
- Określ odpowiedni monitor.
- Pobieranie współrzędnych do monitora.
- Umieść obiekt przy użyciu współrzędnych.
Zazwyczaj obiekt można umieścić na monitorze podstawowym lub na monitorze, który ma już na nim obiekt. Aby zidentyfikować monitor dla danego punktu, prostokąta lub okna, użyj MonitorFromPoint, MonitorFromRecti MonitorFromWindow.
Aby uzyskać współrzędne monitora, użyj GetMonitorInfo, który zapewnia zarówno obszar roboczy, jak i cały prostokąt monitora. Należy pamiętać, że SM_CXSCREEN i SM_CYSCREEN zawsze odwołują się do monitora podstawowego, a niekoniecznie monitora, który wyświetla aplikację. Należy również unikać SM_xxVIRTUALSCREEN, ponieważ powoduje to wyśrodkowanie okna na ekranie wirtualnym, a nie na monitorze.
Aby wyśrodkować okna dialogowe w obszarze roboczym okna, użyj stylu DS_CENTER. Aby wyśrodkować okno dialogowe do okna aplikacji, użyj polecenia GetWindowRect. System Windows automatycznie ogranicza menu i okna dialogowe do monitora. Jednak może wystąpić problem z niestandardowymi menu, niestandardowymi polami rozwijanym, niestandardowymi paletami narzędzi i zapisaną pozycją aplikacji.
Aby zapoznać się z przykładem prawidłowego pozycjonowania obiektów, zobacz Pozycjonowanie obiektów w konfiguracji wielu wyświetlaczy.
Użycie SM_CXSCREEN i SM_CYSCREEN w celu określenia lokalizacji paska narzędzi pulpitu aplikacji (nazywanego również ) ogranicza pasek aplikacji do monitora podstawowego. Aby zezwolić na używanie paska aplikacji na dowolnej krawędzi dowolnego monitora, użyj odpowiednich metryk systemowych, aby obliczyć krawędzie monitorów. Ponadto użyj makr GET_X_LPARAM i GET_Y_LPARAM, aby wyodrębnić współrzędne. W przeciwnym razie znak współrzędnych może być nieprawidłowy. Te makra są zawarte w pliku Windowsx.h.
Rozmiar okna pełnoekranowego musi ulec zmianie w miarę przesuwania się między monitorami o różnych rozdzielczościach. Aby to zrobić, aplikacja musi sprawdzić, w jakim oknie się znajduje, używając MonitorFromWindow lub MonitorFromPoint, a następnie użyć GetMonitorInfo, aby uzyskać rozmiar monitora. Alternatywnie można użyć HMONITOR z funkcji DirectX DirectDrawEnumerateEx. Następnie użyj SetWindowPos, aby ustawić pozycję i dopasować rozmiar okna tak, aby zakrywało monitor.
Zmaksymalizowane okno nie zasłania paska zadań, który ma właściwość "Zawsze na wierzchu". Jednak okno pełnoekranowe obejmuje pasek zadań — na przykład w pokazach slajdów i grach programu Microsoft PowerPoint.
Aby zapisać i później przywrócić pozycję okna po zakończeniu działania aplikacji, użyj funkcji GetWindowPlacement i SetWindowPlacement. Sprawdź jednak, czy pozycja jest nadal prawidłowa przed jego użyciem, ponieważ monitor mógł zostać przeniesiony lub usunięty z systemu. Aplikacja wyświetla okno na monitorze podstawowym, jeśli HMONITOR okna jest nieprawidłowy.
System próbuje uruchomić aplikację na monitorze zawierającym skrót. Dlatego jednym ze sposobów pozycjonowania aplikacji jest posiadanie skrótu do żądanego monitora.
Jeśli używasz ShellExecute lub ShellExecuteEx , podaj hWnd, aby system otworzył wszystkie nowe okna na tym samym monitorze co aplikacja wywołująca.
Należy pamiętać, że wartości struktury MINMAXINFO są nieco zmieniane dla systemu z wieloma monitorami.