|
TImageList *SmallImageList = new TImageList(this);
TImageList *LargeImageList = new TImageList(this);
SmallImageList->ShareImages = true;
LargeImageList->ShareImages = true;
SmallImageList->Handle = SHGetFileInfo("", 0, &IconInfo, sizeof(IconInfo),
SHGFI_ICON | SHGFI_SMALLICON |
SHGFI_SYSICONINDEX);
LargeImageList->Handle = SHGetFileInfo("", 0, &IconInfo, sizeof(IconInfo),
SHGFI_ICON | SHGFI_LARGEICON |
SHGFI_SYSICONINDEX);
팁 트릭 란의 비트맵에서 아이콘 읽기 를 참조 하다가 잘 안되서 질문 올립니다...
위의 소스는 시스템의 이미지 리스트 입니다....
이렇게 하니깐 구해 지더군여....
팁란의 방식대로 하면 추가가 잘 되는데...
화일에서 읽어서 넣을려구하면 치명적 에러로 리부팅을 해야 합니다 T.T
도와 주소서....
코맨트가 마나서 지저분해 보이는것은 지난 이틀간의 눈물입니다.....-.-
다음은 제가 시도한 여러가지 입니다
/*
char tmp[5];
sprintf(tmp,"%d",LargeImageList -> Count );
ShowMessage (tmp);
int IconSizeX = GetSystemMetrics(SM_CXICON); SM_CXICONSPACING, SM_CYICONSPACING
int IconSizeY = GetSystemMetrics(SM_CYICON); SM_CXICON,SM_CYICON
int IconSmallSizeX = GetSystemMetrics(SM_CXSMICON); SM_CXSMICON,SM_CYSMICON
int IconSmallSizeY = GetSystemMetrics(SM_CYSMICON);
TIcon *NewIcon = ExtractIcon(HInstance, "파일의 전체경로", 0);
ImageList1->AddIcon(NewIcon);
UINT ExtractIconEx(
LPCTSTR lpszFile, // file name
int nIconIndex, // icon index
HICON *phiconLarge, // large icon array
HICON *phiconSmall, // small icon array
UINT nIcons // number of icons to extract
);
BOOL DestroyIcon(
HICON hIcon // handle to icon
);
*/
TIcon *NewIcon = new TIcon;
TIcon *NewSmallIcon = new TIcon;
// TIcon *ret = new TIcon;
HICON * a = new HICON;
HICON * b = new HICON;
char tmp[55];
sprintf(tmp,"big:%d small:%d",LargeImageList -> Count ,SmallImageList -> Count);
ShowMessage (tmp);
/*
int sx,sy;
ImageList_GetIconSize(LargeImageList,&sx,&sy);
sprintf(tmp,"big:%d small:%d",sx,sy);
ShowMessage (tmp);
ImageList_GetIconSize(SmallImageList ,&sx,&sy);
sprintf(tmp,"big:%d small:%d",sx,sy);
ShowMessage (tmp);
*/
// int ret = ExtractIconEx("C:\\Program Files\\Borland\\CBuilder3\\Lib\\res\\my.ico",
int ret = ExtractIconEx("C:\\Program Files\\WinZip\\winzip32.exe",
0,
a,//NewIcon->Handle,
b,//NewSmallIcon->Handle,
1);
sprintf(tmp,"%d",ret);
ShowMessage (tmp);
if ( 1)
{
NewIcon->Handle = a,
NewSmallIcon->Handle = b,
LargeImageList ->AddIcon(NewIcon);
SmallImageList ->AddIcon(NewSmallIcon);
}
sprintf(tmp,"big:%d small:%d",LargeImageList -> Count ,SmallImageList -> Count);
ShowMessage (tmp);
// delete NewIcon;
// delete NewSmallIcon;
// Create the "And" mask
int IconSizeX = GetSystemMetrics(SM_CXICON); // SM_CXICONSPACING, SM_CYICONSPACING
int IconSizeY = GetSystemMetrics(SM_CYICON); //SM_CXICON,SM_CYICON
int IconSmallSizeX = GetSystemMetrics(SM_CXSMICON); // SM_CXSMICON,SM_CYSMICON
int IconSmallSizeY = GetSystemMetrics(SM_CYSMICON);
Graphics::TBitmap * AndMask = new Graphics::TBitmap;
AndMask->LoadFromFile("C:\\Program Files\\Borland\\CBuilder3\\Lib\\res\\my.ico");
// AndMask->Monochrome = true;
AndMask->Width = IconSmallSizeX;
AndMask->Height = IconSmallSizeY;
// Draw on the "And" mask
// AndMask->Canvas->Brush->Color = clBlue;
// AndMask->Canvas->FillRect(Rect(0, 0, IconSizeX, IconSizeY));
// AndMask->Canvas->Brush->Color = clBlack;
// AndMask->Canvas->Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
// Draw as a test
// Create the "XOr" mask
Graphics::TBitmap * XOrMask = new Graphics::TBitmap;
XOrMask->LoadFromFile("C:\\Program Files\\Borland\\CBuilder3\\Lib\\res\\my.ico") ;
XOrMask->Width = IconSmallSizeX;
XOrMask->Height = IconSmallSizeY;
// Draw on the "XOr" mask
// XOrMask->Canvas->Brush->Color = clBlack;
// XOrMask->Canvas->FillRect(Rect(0, 0, IconSizeX, IconSizeY));
// XOrMask->Canvas->Pen->Color = clRed;
// XOrMask->Canvas->Brush->Color = clRed;
// XOrMask->Canvas->Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
// Draw as a test
// Create a icon
TIcon * Icon = new TIcon;
TIconInfo IconInfo2;
IconInfo2.fIcon = true;
IconInfo2.xHotspot = 0;
IconInfo2.yHotspot = 0;
IconInfo2.hbmMask = AndMask->Handle;
IconInfo2.hbmColor = XOrMask->Handle;
Icon->Handle = CreateIconIndirect(&IconInfo2);
// if ( (LargeImageList -> Count) != 469 )
// TIcon * Icon = new TIcon;
// Icon->LoadFromFile("C:\\Program Files\\Borland\\CBuilder3\\Lib\\res\\tmp.bmp");
// LargeImageList ->AddIcon(Icon);
SmallImageList ->AddIcon(Icon);
sprintf(tmp,"big:%d small:%d",LargeImageList -> Count ,SmallImageList -> Count);
ShowMessage (tmp);
// Destroy the temporary bitmaps
delete AndMask;
delete XOrMask;
// Free the icon
delete Icon;
/*
sprintf(tmp,"%d",LargeImageList -> Count );
ShowMessage (tmp);
*/
|