키워드 [Programming][VC++][Icon][Merge]
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=265&ref=192
이번에 쓰는 팁은 아주 간단한 겁니다... 파일이나 폴더 브라우져를 만드시는 분에게
꼭 필요한 팁이 아닐까 생각합니다.
강좌를 중단한건 엄청 잘못했지만 그래도 관련된 자료나 팁은 계속 올리겠습니다.
이번에 사용되는 팁은 아이콘을 표시할 때 공유되는 폴더나 바로가기 아이콘 처럼
원래의 아이콘에 오버레이된 이미지를 사용하여 원하는 아이콘을 만들어 사용하는
팁입니다.
디바이스 컨텍스나 이미지 처리를 하지않고 사용할 수 있는 간단한 방법이지요... ^^;;;
여기서는 바로가기 아이콘을 흉내낸 처리루틴입니다.
// hiFolder는 원본 아이콘
HICON GetLinkedIcon(HICON hiFolder)
{
// 리턴할 아이콘
HICON hiShared;
// 바로가기의 쪼그만 사각형에 화살표가 들은 아이콘을 저장할 핸들
HICON hiHand;
// 바로가기의 쪼그만 사각형 아이콘 핸들을 얻어온다.
ExtractIconEx("shell32.dll", 29, &hiHand, NULL, 1);
// 주어진 플래그대로 HIMAGELIST 를 만든다.
HIMAGELIST himl = ImageList_Create(32, 32, ILC_MASK, 1, 0);
// 아이콘의 Merge 처리를 위하여 이미지 리스트에 추가한다.
ImageList_AddIcon(himl, hiFolder);
ImageList_AddIcon(himl, hiHand);
// 두개의 아이콘을 Merge 시킨다.
HIMAGELIST himlNew = ImageList_Merge(himl, 0, himl, 1, 0, 0);
// 이미지 리스트에서 Merge된 아이콘을 찾아낸다.
hiShared = ImageList_ExtractIcon(0, himlNew, 0);
// 다쓴 아이콘 지우기
DestroyIcon(hiHand);
// 다쓴 이미지 리스트 지우기
ImageList_Destroy(himl);
ImageList_Destroy(himlNew);
// 완성된 아이콘 돌려주기
return hiShared;
}