2015-06-27 2 views
0

Я работаю над приложением C++ для управления обоями на нескольких мониторах в Windows, например, что делают UltraMon и DisplayFusion, но с большим количеством опций.Положение мониторов на обоях Windows

Everthing работает хорошо, но наблюдает за размещением.

Мой рабочий стол имеет три монитора, расположенных таким образом (игнорировать N ° 4) enter image description here

Но когда я смотрю на файл обоев, порожденного UltraMon, на thrid монитора (маленький) не имеет ту же позицию : enter image description here

с помощью EnumDisplayMonitors и функции GetMonitorInfo я получаю эти данные:

0: 1920x1080 at 1920x0 
1: 1920x1080 at 0x0 primary 
2: 800x480 at -800x-480 

что соответствует моей Arrang но отличается от файла обоев.

Как узнать, где находится изображение в глобальном файле обоев, чтобы оно отображалось на правом мониторе? Думаю, автор UltraMon нашел правильный путь, потому что он работает отлично.

(Я тоже задал этот вопрос на форуме UltraMon).

+1

Предположительно, изображение обоев должно начинаться с логической координаты 0x0 (т. Е. С обоими для основного монитора), а затем обертывается вокруг. –

+0

http://blogs.msdn.com/b/oldnewthing/archive/2007/09/24/5083738.aspx –

+0

@RaymondChen Я думаю, что получаю, будет немного сложно кодировать :) – Mistic

ответ

2

Благодаря статье, цитируемой Raymon Chen, я понял это. http://blogs.msdn.com/b/oldnewthing/archive/2007/09/24/5083738.aspx

Две вещи, чтобы знать:

  1. трюк иметь различные обои на каждый монитор построить «макро обои» и сделать его черепицей accross рабочий стол
  2. плитка начинается 0; 0 на основном мониторе

Зная, что любой монитор, который находится слева или сверху основного монитора, находится на другой плите обоев.

Давайте посмотрим это на картинке: enter image description here

в зеленом цвете мы имеем фактический рабочий стол, который использует четыре плитки фонового изображения (в красном).

Теперь пришло время закодировать это!

Смежные вопросы