Ответ 1
Причина этого в том, что класс 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 может решить эту проблему, поскольку я знаю, что многие элементы пользовательского интерфейса были обновлены. Я на самом деле не пытался его использовать, поэтому я не могу быть уверен.