안녕하세요. 천리안 프로그래머포럼 C++Builder 담당자 임펠리테리입니다.
놀랐습니다. 엄청나게 공부를 하시나 보군요~! 질문이 하나둘이 아니니...
말씀하신대로 ExtractIcon()은 16비트 함수입니다. 그런데, 이늠의 32비트 버전은
SHFILEINFO가 아니고, ExtractIconEx() 입니다. 32비트함수가 새로이 만들어진것은
이유가 있겠죠? 이늠은 큰아이콘과 작은 아이콘을 따로 리턴해줍니다. 한방에요.
말씀하신 SHFILEINFO는 함수가 아니고 구조체입니다. 그리고 이 구조체를 사용하는
함수는 SHGetFileInfo() 이죠. 이 함수는 파일이나 폴더의 여러가지 정보를 리턴해
주는데, SHFILEINFO를 리턴하면서 여기에 정보를 담아주는 식입니다.
이 구조체는 역시 그 파일속에 있는 아이콘의 갯수와 아이콘 핸들도 리턴합니다.
SHGetFileInfo()는 ExtractIconEx()보다 좀더 복잡한 동작을 하는데...
이에 대해선 다음번에 설명하죠.
ExtractIconEx()의 사용법에 대해 설명드리죠. 아무래도 ExtractIcon() 함수의
32비트 버전을 원하시는것 같으니까요.
주의할 것은, ExtractIconEx()은 HICON의 배열들을 인자로 요구한다는 것입니다.
먼저 빈 프로젝트를 하나 만들어서 버튼하나와 이미지 두개를 떨어뜨린 후에
버튼의 클릭핸들러를 다음과 같이 코딩해보세요.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HICON LargeIcon[1];
HICON SmallIcon[1];
ExtractIconEx("아이콘을 읽을 파일의 패스", 0, LargeIcon, SmallIcon, 1);
Image1->Picture->Icon->Handle = LargeIcon[0];
Image2->Picture->Icon->Handle = SmallIcon[0];
}
이렇게 하면 이미지 두개에 각각 큰 아이콘과 작은 아이콘이 나타납니다.
만약 여러개의 아이콘을 한꺼번에 받으시려면, HICON 배열의 인덱스 갯수를 원하는
만큼 만들어서 넘겨주고, 마지막 인자인 1을 받아올 아이콘의 갯수로 해줘야 합니다.
그럼 도움되시길...
독립문에서 임펠리테리였습니다.
(cbuilder, cbuilder@thrunet.com)
|