Как проверить видимое разрешение системы - PullRequest
0 голосов
/ 17 ноября 2009

Я не совсем уверен, как сформулировать эти вопросы, поэтому я просто собираюсь объяснить свою проблему.

Моя программа VB 6 сохраняет местоположение экрана в реестре, чтобы при повторной загрузке оно могло иметь местоположение по умолчанию. Это работает, как ожидалось, но я столкнулся с проблемой. У меня была настройка компьютера с 2 мониторами. Я перетащил окно на второй экран, а затем на следующий день, когда я отключил второй монитор. Каждый раз, когда я загружал программу, она появлялась в доке, но самой формы не было.

Я подумал, что он прячется на месте второго монитора (или должен был быть второй монитор). Сначала я подключил второй монитор, чтобы вернуть его обратно, но он не появился. Настройка монитора была такой, что основной монитор (1) находился слева от нового монитора (2). Мне пришлось перетащить (2) слева от (1), и в этот момент он появился, и я смог перетащить его обратно в главное окно, и все работало нормально. Я упоминаю об этом, потому что я полагал, что разрешение каждого номера монитора было относительно себя. Является ли мультимонитор одной гигантской координатной плоскостью?

Что я хочу знать, так это то, что когда я получаю номера местоположений из реестра (Form.left и Form.top), есть ли способ сравнить его с тем, что доступно системе? Это не большая проблема, но я знаю, что в конечном итоге клиенты будут звонить и спрашивать: «Это загрузка, но я не могу ее найти!» и хотел бы избежать этих вызовов, если это возможно.

Спасибо всем

Ответы [ 2 ]

0 голосов
/ 17 ноября 2009

Не знаю о VB, но вы можете вызвать собственные API-интерфейсы Win32 для решения проблемы.

GetSystemMetrics (SM_CMONITORS) возвращает количество мониторов, или вы можете перечислить их с помощью EnumDisplayMonitors (), если вам необходимо различать «реальные» мониторы и мониторы с псевдо-дисплеем.

Используйте MonitorFromPoint () или MonitorFromRect () или MonitorFromWindow (), чтобы идентифицировать монитор в указанной точке, а затем используйте GetMonitorInfo (), чтобы получить информацию об этом мониторе, включая его координаты виртуального экрана. Затем вы можете расположить окно на мониторе по вашему выбору.

Я не знаю, как надежно определить, отсутствует ли второй монитор или выключен. Я подозреваю, что вы можете использовать API настройки (!) Для этого - SetupDiEnumDeviceInfo () можно использовать для перечисления устройств монитора, а SetupDiGetDeviceRegistryProperty () - для получения информации о каждом из них, например о текущем состоянии питания.

0 голосов
/ 17 ноября 2009

Не совсем ответ на ваш вопрос, но он может помочь в решении подобных проблем в будущем или ваших клиентов, если они столкнутся с ним.

Если щелкнуть правой кнопкой мыши кнопку на панели задач (или в Windows 7 щелкнуть правой кнопкой мыши предварительный просмотр окна Aero Peek), вы увидите параметр Переместить . Нажмите на это, а затем нажмите одну из ваших клавиш со стрелками, не имеет значения, какой. После этого окно будет в подвижном режиме, и вы можете просто переместить мышку и вуаля, оно вернется на экран и будет действовать так, как если бы вы перетаскивали строку заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...