virtual Image Make() const { SHFILEINFO info; AvoidPaintingCheck__(); SHGetFileInfo(ToSystemCharset(file), dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL, &info, sizeof(info), SHGFI_ICON|(large ? SHGFI_LARGEICON : SHGFI_SMALLICON)|(exe ? 0 : SHGFI_USEFILEATTRIBUTES)); return ProcessSHIcon(info); }
static void Win32PanicMessageBox(const char *title, const char *text) { AvoidPaintingCheck__(); #ifdef PLATFORM_WINCE static wchar wtext[256], wtitle[256]; ToUnicode(wtext, text, strlen(text), CHARSET_DEFAULT); ToUnicode(wtitle, title, strlen(title), CHARSET_DEFAULT); MessageBox(::GetActiveWindow(), wtext, wtitle, MB_ICONSTOP | MB_OK | MB_APPLMODAL); #else MessageBox(::GetActiveWindow(), text, title, MB_ICONSTOP | MB_OK | MB_APPLMODAL); #endif }
Image ProcessSHIcon(const SHFILEINFO& info) { AvoidPaintingCheck__(); Color c = White(); Image m[2]; for(int i = 0; i < 2; i++) { ICONINFO iconinfo; if(!info.hIcon || !GetIconInfo(info.hIcon, &iconinfo)) return Image(); BITMAP bm; ::GetObject((HGDIOBJ)iconinfo.hbmMask, sizeof(BITMAP), (LPVOID)&bm); Size sz(bm.bmWidth, bm.bmHeight); ImageDraw iw(sz); iw.DrawRect(sz, c); ::DrawIconEx(iw.GetHandle(), 0, 0, info.hIcon, 0, 0, 0, NULL, DI_NORMAL|DI_COMPAT); ::DeleteObject(iconinfo.hbmColor); ::DeleteObject(iconinfo.hbmMask); c = Black(); m[i] = iw; } ::DestroyIcon(info.hIcon); return RecreateAlpha(m[0], m[1]); }