У меня есть диалоговое окно, в котором мне нужно отобразить стандартный значок информации. Вот мой код RC:
ICON "",IDC_ICON_INFORMATION,18,70,21,20
Я обрабатываю сообщение WM_INITDIALOG следующим образом:
HICON aIcn = LoadIcon(NULL, IDI_INFORMATION);
SendDlgItemMessage(m_hWnd, IDC_ICON_INFORMATION, STM_SETICON, (WPARAM) aIcn, 0);
При разрешении 96 точек на дюйм все работает отлично: статический элемент управления отображает значок размером 32x32 пикселя.
Однако, когда я переключаюсь на более высокое значение DPI (щелкнув правой кнопкой мыши Рабочий стол, выбрав Разрешение экрана и нажав Сделать или другие элементы большего или меньшего размера strong >) значок не масштабируется! Поскольку все остальное хорошо масштабируется, значок визуально выглядит намного меньше, чем соседний текст. Я ожидал, что на 144 DPI (150%) размер значка будет 48x48 пикселей. Я объявил свое приложение как поддерживающее DPI через XML-манифест.
Самое проклятое, что когда я использую свой собственный значок (также взятый из файла RC), все отлично масштабируется. Кроме того, функция MessageBox
, вызываемая с флагом MB_ICONINFORMATION
, также отображает масштабированную версию значка.
Учитывая эти мысли, я предполагаю следующее:
- Статический элемент управления со стилем
SS_ICON
может отображать масштабированные версии значков. - Ресурс значка, который содержит стандартный значок информации, имеет масштабированную версию значка (48x48).
Что я тогда делаю не так?
LoadIconWithScaleDown
(доступная в Vista и выше). Есть другие идеи? - person Kerido   schedule 25.08.2010