एमएफसी टूलबार आइकन के लिए उच्च रंग गहराई?

मैं सोच रहा था कि एमएफसी में टूलबार कैसे बनाया जाए जो भयानक 16 रंगों के बजाय 24 बिट या 256 रंग बिटमैप्स का इस्तेमाल करता था।

क्या कोई मुझे कुछ सरल कोड की दिशा में इंगित कर सकता है?

धन्यवाद

0

2 उत्तर

ऐसा होने का कारण यह है कि एमएफसी सीटूलबार क्लास आंतरिक रूप से एक छवि सूची का उपयोग करती है जिसे केवल 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);

यह भी संभव है कि वीएस -2008 में नए एमएफसी संस्करण ने इस समस्या को हल कर लिया हो क्योंकि मुझे पता है कि कई यूआई तत्व अपडेट किए गए हैं। मैंने वास्तव में इसका उपयोग करने की कोशिश नहीं की है, इसलिए मैं निश्चित नहीं हो सकता।

0
जोड़ा
मुझे यह कोड काम नहीं कर रहा है। थोड़ी सी झुकाव के साथ मैंने इसे चलाने में कामयाब रहा है लेकिन मुझे पूरी तरह रिक्त आइकन मिलते हैं। कोई विचार?
जोड़ा लेखक Konrad, स्रोत
हां, मैंने पहले 16 रंग का थोड़ा नक्शा लिया और दृश्य स्टूडियो का उपयोग करके इसे परिवर्तित कर दिया। निर्माण के अनुसार, मैंने अपवाद के साथ बिल्कुल आपके निर्देशों का पालन किया: CImageList m_imagelist; m_imagelist.Create (20, 20, ILC_COLOR8, 4, 4); ...
जोड़ा लेखक Konrad, स्रोत
निश्चित रूप से, मैं समझता हूं कि। मेरे आइकन 16,15 हैं और मैंने इसे बदल दिया है (माफ करना उल्लेख करना भूल गया) और मुझे पता है कि बिटमैप 256 रंग (8 बिट्स) है। मुझे जो कुछ मिल रहा है वह यह है कि यह घोषणा के साथ कैसे काम करे:
जोड़ा लेखक Konrad, स्रोत
अगर (! m_wndToolBar.CreateEx (यह, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP) || m_wndToolBar.LoadToolBar (IDR_MAINFRAME)) ...
जोड़ा लेखक Konrad, स्रोत
माफ़ी, कुछ tinkering किया और यह काम कर रहा है। आपके इनपुट के लिए बहुत धन्यवाद।
जोड़ा लेखक Konrad, स्रोत
यह 32 बिट रंग बिटमैप के लिए ILC_COLOR8 के स्थान पर ILC_COLOR32 का उपयोग करके मेरे लिए काम किया! अच्छा लगा। ;)
जोड़ा लेखक Mordachai, स्रोत
इसके लिए धन्यवाद, यह मुझे आज चिपचिपा स्थिति से बाहर कर दिया।
जोड़ा लेखक Adam Pierce, स्रोत
बिटमैप लोड करना आसान है यदि आप केवल CBitmap.LoadBitmap() कॉल का उपयोग करते हैं, या क्या मुझे कुछ याद आ रहा है?
जोड़ा लेखक gbjbaanb, स्रोत
क्या आपने अपनी प्रोजेक्ट में एक उपयुक्त आकार का बिटमैप संसाधन बनाया है और CImageList :: उचित पैरामीटर के साथ बनाएँ?
जोड़ा लेखक Stu Mackellar, स्रोत
निश्चित रूप से कोड का आखिरी बिट बॉयलरप्लेट है जो एमएफसी मानक टूलबार के लिए जोड़ता है? क्षमा करें, मैंने माना है कि आपके फ्रेम विंडो में पहले से ही टूलबार था!
जोड़ा लेखक Stu Mackellar, स्रोत
@gbjbaanb लोडबिटमैप का कोई अधिभार नहीं है जो एचबीआईटीएमएपी लेता है - केवल वे लोग जो संसाधन आईडी या संसाधन नाम लेते हैं।
जोड़ा लेखक Stu Mackellar, स्रोत

समाधान ने दोषपूर्ण काम किया, आपको केवल इसे ठीक करने की आवश्यकता है:

CImageList m_imagelist;
m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4); 
m_imagelist.Add(&bm, (CBitmap*) NULL); 
0
जोड़ा