Я работаю над приложением C ++ для управления обоями на нескольких мониторах в Windows, как это делают UltraMon и DisplayFusion, но с большим количеством опций.
Все работает хорошо, но контролирует размещение.
Мой рабочий стол имеет три монитора, расположенных так (игнорируйте № 4)
Но когда я смотрю на файл обоев, созданный UltraMon, третий монитор (маленький) не имеет такой же позиции:
Используя функции EnumDisplayMonitors и GetMonitorInfo, я получаю следующие данные:
0: 1920x1080 at 1920x0
1: 1920x1080 at 0x0 primary
2: 800x480 at -800x-480
Что соответствует моей договоренности, но отличается от файла обоев.
Как узнать, где размещено изображение в глобальном файле обоев, чтобы оно отображалось на правом мониторе? Я думаю, что автор UltraMon нашел правильный путь, потому что он работает отлично.
(Я задавал этот вопрос на форуме UltraMon тоже).
Благодаря статье, цитируемой Раймоном Ченом, я понял это.
http://blogs.msdn.com/b/oldnewthing/archive/2007/09/24/5083738.aspx
Две вещи, которые нужно знать:
Зная это, любой монитор, который находится слева или сверху от основного монитора, находится на другой плитке обоев.
Давайте посмотрим на это на картинке:
в зеленом у нас есть рабочий стол, который использует четыре плитки изображения обоев (в красном).
Теперь пришло время кодировать это!