J'ai une boîte de dialogue dans laquelle je dois afficher l'icône Informations standard. Voici mon code RC:Win32: Affichage d'une icône de stock dans une boîte de dialogue sous haute résolution
ICON "",IDC_ICON_INFORMATION,18,70,21,20
Je traite le message WM_INITDIALOG comme suit:
HICON aIcn = LoadIcon(NULL, IDI_INFORMATION);
SendDlgItemMessage(m_hWnd, IDC_ICON_INFORMATION, STM_SETICON, (WPARAM) aIcn, 0);
Tout fonctionne très bien sous 96 DPI: le contrôle statique affiche une icône 32x32 pixels.
Cependant, quand je passe à DPI supérieur (par un clic droit sur le bureau , le choix Résolution d'écran, et en cliquant sur Marque ou autres objets plus ou moins) l'icône n'échelle pas! Comme tout le reste évolue bien, l'icône semble visuellement beaucoup plus petite que le texte voisin. Je m'attendais à ce que sur 144 DPI (150%) les dimensions de l'icône seront 48x48 pixels. J'ai déclaré mon application en tant que DPI au travers d'un manifeste XML. La chose la plus foutue est que lorsque j'utilise ma propre icône sur mesure (provenant aussi du fichier RC), tout s'équilibre parfaitement. En outre, la fonction MessageBox
appelée avec l'indicateur MB_ICONINFORMATION
affiche également une version mise à l'échelle de l'icône.
Compte tenu de ces pensées, je suppose des éléments suivants:
- Le contrôle statique avec le style
SS_ICON
peut afficher des versions mises à l'échelle d'icônes. - La ressource d'icône qui contient l'icône Informations standard comporte une version mise à l'échelle de l'icône (48x48).
Qu'est-ce que je fais mal alors?
On dirait que la fonction 'LoadIconWithScaleDown' (disponible dans Vista et au-dessus) peut faire le travail. D'autres idées? – Kerido