Как запретить масштабирование окна в зависимости от настроек монитора?
От: C0x  
Дата: 01.08.18 09:37
Оценка:
Windows 10.

У меня 2 монитора. Назовем их LM (left) и RM (right). Я установил масштабирование для LM в 150% и для RM в 100% scale factor.

Я выяснил что если более 50% окна находится на LM то пиксели этого окна масштабируются с фактором 150%, но если более 50% окна находится на RM то окно масштабируется в соотвествии с фактором 100%.
То есть получается что окно масштабирует в соотвествии с установками на том мониторе на котором находится его большая часть.

Отсюда у меня несколько вопросов:

1. Как запретить маштабирование окна приложения вообще и сделать его константным (неменяющимся)? К примеру, так делает Snipping Tool (стандартное приложение Windows 10).
2. Как получить scale factor всех мониторов.
3. Как установить для моего окна нужный scale factor (мне нужен scale factor минимальный из всех мониторов).
winapi mfc winforms
Re: Как запретить масштабирование окна в зависимости от наст
От: Aniskin  
Дата: 01.08.18 10:52
Оценка: 3 (1)
Здравствуйте, C0x, Вы писали:

C0x>1. Как запретить маштабирование окна приложения вообще и сделать его константным (неменяющимся)? К примеру, так делает Snipping Tool (стандартное приложение Windows 10).

Сделать приложение DPI-aware

C0x>2. Как получить scale factor всех мониторов.

GetDpiForMonitor

C0x>3. Как установить для моего окна нужный scale factor (мне нужен scale factor минимальный из всех мониторов).

Для DPI-aware приложения ручками.

Как вариант просто перед созданием окна вызвать SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE). В этом случае окно будет DPI-aware и не будет реагировать на перетаскивание между мониторами и всегда будет иметь размер, заданный разработчиком.
Отредактировано 01.08.2018 11:00 Aniskin . Предыдущая версия .
Re[2]: Как запретить масштабирование окна в зависимости от наст
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 01.09.18 12:33
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Для DPI-aware приложения ручками.


А для стандартных элементов управления и диалогов? Есть ли возможность один раз задать окну масштабный множитель, чтобы система сама отрисовала все элементы в этом масштабе, независимо от системного масштаба, или пропорционально ему? А координаты/размеры собственных элементов нетрудно пересчитывать ручками.
Re[3]: Как запретить масштабирование окна в зависимости от наст
От: Aniskin  
Дата: 01.09.18 14:08
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Есть ли возможность один раз задать окну масштабный множитель, чтобы система сама отрисовала все элементы в этом масштабе, независимо от системного масштаба, или пропорционально ему?


Насколько я знаю о DPI-aware, нельзя задать конкретному окну множитель, можно лишь выставить процессу/потоку один из четырех доступных режимов, окна будут себя вести в соответствии с режимом. Вроде бы DPI_AWARENESS_CONTEXT_SYSTEM_AWARE частично подходит под требование.
Re[4]: Как запретить масштабирование окна в зависимости от наст
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 01.09.18 15:15
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Вроде бы DPI_AWARENESS_CONTEXT_SYSTEM_AWARE частично подходит под требование.


Не, это не то. Я о возможности независимо масштабировать любое окно средствами системы. Есть ведь приложения, рисующие окна с крупной сеткой и элементами управления, а есть, наоборот, авторы-поклонники очень мелких элементов. При масштабировании всего экрана они масштабируются соответственно, а хотелось бы одни увеличить, а другие уменьшить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.