Pracuję nad aplikacją, która ustawia okna na ekranie w stylu siatki. Podczas uruchamiania tego w systemie Windows 10 istnieje ogromna luka między oknami. Dalsze dochodzenie pokazuje, że GetWindowRect
zwraca nieoczekiwane wartości, w tym niewidoczną granicę, ale nie mogę go uzyskać, aby zwrócić rzeczywiste wartości z widoczną ramką.GetWindowRect zwraca rozmiar z "niewidzialnymi" granicami
1) This thread sugeruje, że jest to zgodne z projektem i można go "naprawić", łącząc się z winver = 6. Moje środowisko to nie pozwala, ale próbowałem zmieniając PE MajorOperatingSystemVersion
i MajorSubsystemVersion
do 6 nie wpływa
2) Ten sam wątek sugeruje również za pomocą DwmGetWindowAttribute
z DWMWA_EXTENDED_FRAME_BOUNDS
uzyskać rzeczywiste współrzędne z DWM, który działa, ale środkiem zmieniając się wszędzie, gdzie dostaje się współrzędne okna. Nie pozwala również na ustawienie wartości, co pozwala nam odwrócić proces, aby móc ustawić rozmiar okna.
3) This question sugeruje, że w tym procesie brakuje świadomości DPI. Ani ustawienie flagi świadomości DPI w manifeście, ani wywołanie SetProcessDpiAwareness
nie przyniosło żadnych rezultatów.
4) Z kaprysu próbowałem także dodać flagi zgodności Windows Vista, 7, 8, 8.1 i 10, a motywy systemu Windows są widoczne bez zmian.
To okno zostanie przeniesiona do 0x0, 1280x1024, rzekomo, aby wypełnić cały ekran, a kiedy zapytań współrzędnych z powrotem, mamy te same wartości. Okno jest jednak w rzeczywistości o 14 pikseli węższe, aby uwzględnić ramkę na starszych wersjach systemu Windows.
Jak przekonać system Windows do pracy z rzeczywistymi współrzędnymi okna?
na pełne okno lub małym oknie, jakie są współrzędne spodziewasz i współrzędne otrzymujesz? –
@barmak Chciałbym, aby po ustawieniu wartości 0x0 okno znajdowało się w lewym górnym rogu, a nie 7x0, w rzeczywistości jest wyświetlane jako. Zobacz zrzut ekranu. – Deanna
Czy to jest VB6 lub VB.NET? – IInspectable