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

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

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

Спасибо

Ответы [ 2 ]

11 голосов
/ 04 ноября 2008

Причина, по которой это происходит, заключается в том, что класс 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 голосов
/ 29 октября 2009

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

CImageList m_imagelist;
m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4); 
m_imagelist.Add(&bm, (CBitmap*) NULL); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...