सी ++: चरण 1: निकालें IconEx। चरण 2: ??? चरण 3: SetMenuItemBitmaps

मैं एक शैल एक्सटेंशन में आइकन जोड़ने के साथ प्रयोग कर रहा हूँ। मेरे पास यह कोड है (आसान पढ़ने के लिए sanitized), जो काम करता है:

InsertMenu(hmenu, index, MF_POPUP|MF_BYPOSITION, (UINT)hParentMenu, namestring);

अगला कदम यह कोड है:

HICON hIconLarge, hIconSmall;
ICONINFO oIconInfo;
ExtractIconEx("c:\\progra~1\\winzip\\winzip32.exe", 0, &hIconLarge, &hIconSmall, 1);
GetIconInfo(hIconSmall, &oIconInfo);
//???????
SetMenuItemBitmaps(hParentMenu, indexMenu-1, MF_BITMAP | MF_BYPOSITION, hbmp, hbmp);

मैं बदलने के लिए क्या डालूँ? इस ज्ञान को Google के प्रयासों ने कई युक्तियां पाई हैं जिन्हें मैं काम करने में असफल रहा। इसे काम करने के लिए विशेष रूप से पुरानी मशीनों (जैसे नो .नेट फ्रेमवर्क, नो विस्टा) पर कोई सलाह नहीं दी जाती है।

0

2 उत्तर

यह काम करता है, हालांकि पिछला रंग पारदर्शी के बजाय काला है।

GetIconInfo(hIconSmall, &oIconInfo);
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor);
0
जोड़ा
जाहिर है, विंडोज आइकन पर कुछ चालाक कर रहा है। ऑर्गेनल आइकन की तुलना में कम पारदर्शिता थी, लेकिन विंडोज़ ने अजीब पारदर्शिता जोड़ने का फैसला किया। उस ने कहा, ऊपर दिए गए कोड को दो चरणों के बीच ड्रिकॉन का उपयोग करके खींचा जाने के लिए बिटमैप की आवश्यकता होती है।
जोड़ा लेखक Brian, स्रोत

विस्टा के पास मेनू में आइकन के लिए उचित समर्थन है, पूर्व विस्टा के लिए, यदि आप असली 16x16 पूर्ण रंग आइकन चाहते हैं तो आपको मालिक ड्रा मेनू आइटम (MF_OWNERDRAW) का उपयोग करना होगा

Vista style menus... Vista style+pre Vista callback

0
जोड़ा
उस समाधान के लिए विंडोज एक्सपी और नेट फ्रेमवर्क की आवश्यकता है। मैं दोनों से बचना चाहता हूँ।
जोड़ा लेखक Brian, स्रोत
क्या आपने दूसरे लिंक को देखा, उसके पास कोड 95 9 पर वापस काम कर रहा है। मुद्दा यह है कि, कुछ भी विस्टा, आपको वास्तव में ड्राइंग करने की ज़रूरत है, इसलिए आप यह चुनने के लिए स्वतंत्र हैं कि क्या आप जीडीआई, जीडीआई + या नेट का उपयोग करना चाहते हैं
जोड़ा लेखक Anders, स्रोत