2015. 6. 16. 15:22ㆍIT-개발/winapi 및 MFC
SHGetFileInfo(strPath,0,&sfi,sizeof(sfi),SHGFI_TYPENAME | SHGFI_ATTRIBUTES | SHGFI_ICON);
LVITEM lvItem;
memset(&lvItem, 0x00, sizeof(lvItem));
lvItem.mask = LVIF_TEXT | LVIF_IMAGE;
lvItem.iItem = 0;
lvItem.pszText =(LPWSTR) (LPCTSTR)strName;//_T("");
lvItem.iImage = sfi.iIcon;
int idx = CListCtrl::InsertItem(&lvItem);
// 요렇게 하면 strPath 경로에 있는 파일의 아이콘이 list 컨트롤에 들어간다. 근데~ ㅠㅠ 문제가 생긴다.
GDI 개수가 왕창 증가 ~ 참고로 윈도우에서 Process당 GDI object 개수를 10000 미만으로 한정하고 있어서 9999 개 이후
부터는 프로그램의 UI가 깨어지는 현상이 나타나기 시작합니다~
함수 실행할때 마다 ㅠㅠ.. 이건 뭔일?? msdn 보면... 개발자가 알아서 HICON 을 Release 해주라네요~
그래서...
위 코드에... DestroyIcon((HICON)sfi.hIcon); 만 호출해주면 되네요~
SHGetFileInfo(strPath,0,&sfi,sizeof(sfi),SHGFI_TYPENAME | SHGFI_ATTRIBUTES | SHGFI_ICON);
LVITEM lvItem;
memset(&lvItem, 0x00, sizeof(lvItem));
lvItem.mask = LVIF_TEXT | LVIF_IMAGE;
lvItem.iItem = 0;
lvItem.pszText =(LPWSTR) (LPCTSTR)strName;//_T("");
lvItem.iImage = sfi.iIcon;
int idx = CListCtrl::InsertItem(&lvItem);
DestroyIcon((HICON)sfi.hIcon);
// 요렇게만 해주면 GDI 개수가 계속 올라가는 현상 없어집니다. ^_^... 아~ 옛날에 경험한거 같은데~
// CListCtrl 상에 icon은 DestroyIcon 호출한 후에도 잘 나오니 걱정 않해도 됩니다.
'IT-개발 > winapi 및 MFC' 카테고리의 다른 글
"Warning: Calling DestroyWindow in CWnd::~CWnd" 처리하기(펌) (0) | 2015.07.02 |
---|---|
CListCtrl 의 정렬 기능~ (0) | 2015.06.16 |
어이 없는 CListCtrl -_-.. 원인파악되면 나중에 상세히 설명하지. 일단은 증상만 (0) | 2015.06.12 |
[UI - Tree] item 선택된 항목 계속 표시 방법 (0) | 2015.06.08 |
강제 casting이 이래서 필요하군요~~ㅠ (0) | 2015.06.04 |