2008-11-04 4 views
10

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

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

Благодаря

ответ

11

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

+0

Я не могу показаться, чтобы получить этот код работает. С небольшим мастерингом мне удалось запустить его, но я получаю совершенно пустые значки. Есть идеи? – Konrad 2008-11-04 15:17:33

0

Раствор работал Flawless, вам нужно только, чтобы исправить это немного:

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