La raison pour laquelle cela se produit est que la classe MFC CToolbar utilise une liste d'images interne qui est initialisée à utiliser 16 couleurs seulement. La solution consiste à créer notre propre liste d'images et à indiquer à la barre d'outils de l'utiliser à la place. Je sais que cela fonctionnera pour 256 couleurs, mais je ne l'ai pas testé avec profondeurs de bits plus:
En premier lieu, charger une image bitmap 256 couleurs à partir d'une ressource:
HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_BITMAP,
0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
CBitmap bm;
bm.Attach(hBitmap);
Ensuite, créez un liste d'images 256 couleurs et ajouter notre bitmap à elle:
CImageList m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4);
m_imagelist.Add(&bm, (CBitmap*) NULL);
Enfin, nous devons dire à la barre d'outils pour utiliser la nouvelle liste d'images:
m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);
Il est également possible que la nouvelle version de MFC dans VS2008 ait résolu ce problème car je sais que de nombreux éléments de l'interface utilisateur ont été mis à jour. Je n'ai pas encore essayé de l'utiliser, donc je ne peux pas en être certain.
Je ne peux pas sembler obtenir ce code de travail. Avec un peu de bricolage j'ai réussi à le faire fonctionner mais j'ai des icônes complètement vides. Des idées? – Konrad
Avez-vous créé une ressource bitmap de taille appropriée dans votre projet et appelée CImageList :: Create avec les paramètres appropriés? –
Oui, j'ai pris une carte de bits de 16 couleurs auparavant et je l'ai convertie en utilisant Visual Studio. Conformément à la création, j'ai suivi vos instructions exactement avec l'exception: CImageList m_imagelist; m_imagelist.Create (20, 20, ILC_COLOR8, 4, 4); ... – Konrad