Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.67.251] |
|
Сообщ.
#1
,
|
|
|
Есть чужое приложение в котором моя программа периодично кликает на кнопку (кнопка не стандартная, рисуется) по заранее заданным координатам.
LPARAM BtnCoord=MAKELPARAM(100,80); SendMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, BtnCoord); SendMessage(hwnd, WM_LBUTTONUP, 0, BtnCoord); Если поставить в настройках ПК масштаб отличный от 96 точек на дюйм, то на кнопку перестает попадать. При 125% всё смещается на 16 пикселей. Тут получил 1.25 (в моем случае). Что дальше делать чтоб получить корректные координаты в зависимости от настроек DPI не пойму. HDC hDC = GetDC(NULL); float dpiX = GetDeviceCaps(hDC, LOGPIXELSX) / 96.f; float dpiY = GetDeviceCaps(hDC, LOGPIXELSY) / 96.f; ReleaseDC(0, hDC); |
Сообщ.
#2
,
|
|
|
Весьма мутное описание "всё смещается". Что именно означает "всё"?
Если кнопка, то получается, что она: 125%=16px, => 200%=64px, т.е. кнопка 64 пиксела (?). Ну тогда надо ваше смещение перевести в сантиметры и нажимать на (100/dpiX,80/dpiY). Думается так. |
Сообщ.
#3
,
|
|
|
Посчитайте относительные координаты кнопки (относительно окна приложения). Потом по абсолютным координатам приложения найдите уже точные координаты кнопки.
|
Сообщ.
#4
,
|
|
|
Парамон
1.25 * 100 1.25 * 80 ? |
Сообщ.
#5
,
|
|
|
Цитата Славян @ Весьма мутное описание "всё смещается". Что именно означает "всё"? Всё что рисуется в окне увеличивается на 25% (если в настройках 125%), соответственно и окно увеличивается. Сначала мне думалось что 1.25 * 100 и даст верное положение кнопки с учетом настройки DPI, но тогда получается 125 (и это логично), в действительности же кнопка находится в 116 пикселях слева. Я не понимаю. |
Сообщ.
#6
,
|
|
|
Цитата Парамон @ Сначала мне думалось что 1.25 * 100 и даст верное положение кнопки с учетом настройки DPI, но тогда получается 125 (и это логично), в действительности же кнопка находится в 116 пикселях слева. Я не понимаю Размер окна не обязан меняться точно по соотношению DPI. Например в VCL по соотношению DPI сначала рассчитывается высота шрифта в целых пикселах с округлением вниз, и затем окно ресайзится на соотношение новой и дефолтной высоты шрифта. Поэтому при соотношении DPI = 1.25 и дефолтной высоте шрифта = 11 пикселов, реальный ресайз получается не на 1.25, а на 1.18 |