Zastanawiam się, jak utworzyć pasek narzędzi w MFC, który używał bitmapy 24-bitowe lub 256-kolorowe zamiast tych strasznych 16 kolorów.Większa głębia kolorów dla ikon paska narzędzi MFC?
Czy ktoś może wskazać mi kierunek prostego kodu?
Dzięki
Zastanawiam się, jak utworzyć pasek narzędzi w MFC, który używał bitmapy 24-bitowe lub 256-kolorowe zamiast tych strasznych 16 kolorów.Większa głębia kolorów dla ikon paska narzędzi MFC?
Czy ktoś może wskazać mi kierunek prostego kodu?
Dzięki
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.
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);
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
Czy utworzyłeś w swoim projekcie zasób mapy bitowej o odpowiednim rozmiarze i wywołałeś CImageList :: Create z odpowiednimi parametrami? –
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