2008-11-04 7 views

Respuesta

11

La razón por la que esto sucede es que la clase MFC CToolbar utiliza internamente una lista de imágenes que se inicializa para utilizar sólo 16 colores. La solución es crear nuestra propia lista de imágenes y decirle a la barra de herramientas que use eso en su lugar. Sé que esto va a funcionar para 256 colores, pero no he probado con mayores profundidades de bits:

En primer lugar, cargar un mapa de bits de 256 colores de un recurso:

HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_BITMAP, 
    0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS); 
CBitmap bm; 
bm.Attach(hBitmap); 

A continuación, cree una 256 colores lista de imágenes y añadir nuestro mapa de bits a la misma:

CImageList m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4); 
m_imagelist.Add(&bm, (CBitmap*) NULL); 

Por último, tenemos que decirle a la barra de herramientas para utilizar la nueva lista de imágenes:

m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist); 

También es posible que la nueva versión de MFC en VS2008 haya solucionado este problema, ya que sé que muchos de los elementos de la interfaz de usuario se han actualizado. No he intentado usarlo todavía, así que no puedo estar seguro.

+0

Me parece que no puede obtener este código de trabajo. Con un pequeño retoque logré ponerlo en funcionamiento, pero obtengo íconos completamente en blanco. ¿Algunas ideas? – Konrad

+0

¿Ha creado un recurso de mapa de bits de un tamaño adecuado en su proyecto y llamado CImageList :: Create con los parámetros adecuados? –

+0

Sí, tomé un mapa de bits previamente de 16 colores y lo convertí usando Visual Studio. De acuerdo con Create, seguí exactamente sus instrucciones con la excepción: CImageList m_imagelist; m_imagelist.Create (20, 20, ILC_COLOR8, 4, 4); ... – Konrad

0

La solución funcionó sin defectos, sólo es necesario fijar un poco:

CImageList m_imagelist; 
m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4); 
m_imagelist.Add(&bm, (CBitmap*) NULL); 
Cuestiones relacionadas