2008-11-04 20 views

Odpowiedz

11

Powodem takiej sytuacji jest to, że klasa MFC CToolbar używa wewnętrznie listę obrazu, który jest inicjowany używać tylko 16 kolorów. Rozwiązaniem jest utworzenie własnej listy obrazów i wskazanie paskowi narzędzi, aby używał tego. Wiem, że to będzie działać na 256 kolorów, ale nie testowałem go z większych głębokościach bitowych:

Najpierw załadować bitmapę 256 kolorów z zasobu:

HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_BITMAP, 
    0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS); 
CBitmap bm; 
bm.Attach(hBitmap); 

Następnie należy utworzyć 256-color lista obrazów i dodać naszą bitmapę do niego:

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

Wreszcie, musimy powiedzieć pasek do korzystania z nowej listy obrazu:

m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist); 

Jest również możliwe, że nowa wersja MFC w VS2008 mogła rozwiązać ten problem, ponieważ wiem, że wiele elementów interfejsu użytkownika zostało zaktualizowanych. Nie próbowałem go jeszcze używać, więc nie mogę być tego pewien.

+0

I nie wydaje się uzyskać ten kod działa. Przy odrobinie majsterkowania udało mi się go uruchomić, ale mam zupełnie puste ikony. Jakieś pomysły? – Konrad

+0

Czy utworzyłeś w swoim projekcie zasób mapy bitowej o odpowiednim rozmiarze i wywołałeś CImageList :: Create z odpowiednimi parametrami? –

+0

Tak, wziąłem poprzednio 16-bitową mapę bitową i przekonwertowałem ją za pomocą wizualnego studio. Zgodnie z utworem, postępowałem zgodnie z instrukcjami dokładnie z wyjątkiem: CImageList m_imagelist; m_imagelist.Create (20, 20, ILC_COLOR8, 4, 4); ... – Konrad

0

rozwiązanie działało bez zarzutu, trzeba tylko trochę go naprawić:

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