Причина, по которой это происходит, заключается в том, что класс MFC CToolbar использует внутренний список изображений, инициализированный для использования только 16 цветов. Решением является создание нашего собственного списка изображений и указание панели инструментов использовать его вместо этого. Я знаю, что это будет работать для 256 цветов, но я не тестировал его с большей битовой глубиной:
Сначала загрузите 256-битное растровое изображение из ресурса:
HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_BITMAP,
0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
CBitmap bm;
bm.Attach(hBitmap);
Затем создайте список из 256 цветов и добавьте в него наш растровый рисунок:
CImageList m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4);
m_imagelist.Add(&bm, (CBitmap*) NULL);
Наконец, нам нужно указать панели инструментов использовать новый список изображений:
m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);
Также возможно, что новая версия MFC в VS2008 могла решить эту проблему, поскольку я знаю, что многие элементы пользовательского интерфейса были обновлены. На самом деле я еще не пробовал использовать его, поэтому не могу быть уверен.