Причина этого в том, что класс 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 может решить эту проблему, поскольку я знаю, что многие элементы пользовательского интерфейса были обновлены. Я на самом деле не пытался его использовать, поэтому я не могу быть уверенным.
Я не могу показаться, чтобы получить этот код работает. С небольшим мастерингом мне удалось запустить его, но я получаю совершенно пустые значки. Есть идеи? – Konrad 2008-11-04 15:17:33