Я работаю над тем, чтобы сделать мое приложение DPI чувствительным, используя this MSDN guide, где техника масштабирования использует логические пиксели X и Y из контекста устройства.Являются ли пикселы когда-либо квадратом на мониторе?
int _dpiX = 96, _pdiY = 96;
HDC hdc = GetDC(NULL);
if (hdc)
{
_dpiX = GetDeviceCaps(hdc, LOGPIXELSX);
_dpiY = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(NULL, hdc);
}
Тогда вы можете масштабировать X и Y координаты, используя
int ScaleX(int x) { return MulDiv(x, _dpiX, 96); }
int ScaleY(int y) { return MulDiv(y, _dpiY, 96); }
Есть ли когда-нибудь ситуация, когда GetDeviceCaps(hdc, LOGPIXELSX)
и GetDeviceCaps(hdc, LOGPIXELSY)
бы возвращать разные номера для монитора. Единственное устройство, о котором я действительно беспокоюсь, - это монитор, поэтому мне нужно иметь отдельные функции ScaleX(int x)
и ScaleY(int y)
? Могу ли я использовать только одну функцию Scale(int px)
? Будет ли недостаток в этом?
Заранее благодарим за помощь.
Есть много плазменных дисплеев (в основном телевизоров), которые имеют внутреннее разрешение 1024x768, но являются 16: 9. Google "Плазма 1024x768 16: 9" для примеров ". Очень редко это можно найти на мониторе компьютера, но если ее легко запрограммировать, было бы здорово поддержать этот случай! – Chris
@ Крис: Я подозреваю, что аппаратное обеспечение для широкоэкранного дисплея 1024x768 будет применяться преобразование на низком уровне. На уровне драйвера вам будет представлена иллюзия квадратных пикселей, возможно, с помощью виртуального экрана 1280x720 в компоновке 16x9, а аппаратное обеспечение под драйвер будет перепрограммировать квадратные виртуальные пиксели для создания собственных неквадратных пикселей. Я сомневаюсь, что вы сможете адресовать неквадратные нативные пиксели непосредственно на уровне WinAPI. –