Мне кажется, я знаю, что происходит. См. Второе редактирование в конце этого сообщения.
В приложении Win32 на C / C ++ я работаю с (не оригинальным автором) кодом, который использует класс IPicture для рисования растрового изображения в диалоговом окне. Он работает при нормальном размере, и когда пользователь масштабирует «увеличение текста» до 150%, графика также автоматически масштабируется, но не при 125%.
В качестве напоминания, Windows позволяет перейти к Ease of Access (в Windows 7) и «Изменить размер текста и значков» на «Обычный» (100%), «Средний» (125%) или «Большой» (150%). .
IPicture загружает графику (размер пикселя 775) со значением HIMETRIC (аналогично TWIP), равным 20505, при 100%, при 150%, и в этих масштабах оно отображается правильно на экране (вторая увеличивается , но пропорционально правильно), но при 125% он имеет нормальный размер (в большем диалоговом окне) при ХИМЕТРИЧЕСКОЙ ширине 16404 (меньше, чем у двух других, которые масштабируются правильно).
Так что кажется, что по какой-то причине ширина и высота дают значения вне шкалы для 125%, хотя они правильно работают при 100% (меньше) и 150% (выше). Есть идеи?
При редактировании:
LONG gwWidth, gwHeight; // HIMETRIC units
m_spIPicture->get_Width(&gwWidth);
m_spIPicture->get_Height(&gwHeight);
{
char msg[80];
sprintf(&msg[0], "Preparing width %d height %d HIMETRICs\n", gwWidth, gwHeight);
OutputDebugString(msg);
}
, где
IPicture* m_spIPicture;
Вся графика действует так, я спрашивал не только о ней. Каждый сообщает правильный размер в 125% и идентичные значения для 100% и 150%.
Я испытываю желание просто сделать это вручную (по крайней мере, сам получи DPI и посчитай значения).
При редактировании: путаница заключается в том, что я получаю одинаковые значения для 100% и 150%, но 125% масштабируется по-разному. При любом изменении системы нумерации я бы ожидал (в общем случае) один из трех результатов - без изменений, прогрессивно увеличиваться, постепенно изменяться.
Читая больше о виртуализации DPI, эта страница на http://msdn.microsoft.com/en-us/library/dd464659.aspx объясняет загадку с комментарием «Когда DPI установлено на 144, операционная система автоматически включает виртуализацию DPI». (Обратите внимание, что 144 - это 150% режим).
Я все еще изучаю это приложение (я унаследовал его от других источников), но, по-видимому, оно не поддерживает DPI, что означает, что оно будет виртуализироваться, что хорошо в этом случае (почти), но виртуализация не срабатывает, пока 150%, что означает, что мы вроде как наигрались на 125%. Итак, мне нужно либо сделать его виртуальным на 125%, либо знать на 125% и 150%, но, по крайней мере, теперь я знаю, почему он действует по-другому.