Более высокая глубина цвета для значков панели инструментов MFC?

Мне было интересно, как создать панель инструментов в MFC, использующую 24-битные или 256-битные растровые изображения, а не ужасные 16-цветные.

Может ли кто-нибудь указать мне в сторону какого-то простого кода?

Спасибо

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

Ответ 2

Решение работает безупречно, вам нужно лишь немного его исправить:

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