키워드 [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;
}

+ Recent posts