2008-09-18 7 views
1

셸 확장에 아이콘을 추가하여 실험하고 있습니다.C++ : 1 단계 : ExtractIconEx. 2 단계: ??? 3 단계 : SetMenuItemBitmaps

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); 

가의 대체 I 작동이 코드 (읽기 쉽게 살균)를 가지고있다. Google에이 지식을 시도한 결과 많은 팁을 얻지 못했지만 제대로 작동하지 못했습니다. 특히 오래된 시스템 (예 : .net 프레임 워크, 비스타 없음)에서이 문제를 해결하기위한 조언을 보내 주시면 감사하겠습니다.

답변

2

하려는 경우 (MF_OWNERDRAW를) 메뉴 항목을 그릴 소유자를 사용해야합니다 사전 비스타, 메뉴의 아이콘에 대한 적절한 지원을하고있다 뒷면 색은 투명 대신 검정색입니다.

GetIconInfo(hIconSmall, &oIconInfo); 
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor); 
+0

분명히 Windows는 아이콘에 영리한 것을하고 있습니다. orignal 아이콘은 생각보다 투명도가 떨어졌지만 Windows는 이상한 투명성을 추가하기로 결정했습니다. 즉, 위의 코드는 두 단계 사이에 drawicon을 사용하여 그려지는 비트 맵을 필요로합니다. – Brian

2

비스타, 당신은하지만, 당신이 작동 실제 16 × 16 풀 컬러 아이콘

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

+0

이 솔루션에는 Windows XP와 .net 프레임 워크가 필요합니다. 나는 둘 다 피하고 싶다. – Brian

+1

두 번째 링크를 보셨습니까? win95로 돌아가는 코드가 있습니다. 요점은, 어떤 비스타보다 먼저, 직접 드로잉을해야하기 때문에 GDI, GDI + 또는 .Net을 사용하고 싶은지 자유롭게 선택할 수 있습니다. – Anders