void CImgCache::UpdateCell(struct IMAGE_CACHE_INFO* pInfo, BOOL abLoadPreview) { if (pInfo->PreviewLoaded) return; // Уже if (abLoadPreview) { // Если хотят превьюшку - сразу поставим флажок, что пытались pInfo->bPreviewLoaded = TRUE; // Для папок - самостоятельно if (pInfo->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { return; } else { LoadThumbnail(pInfo); } } else { LoadShellIcon(pInfo); } }
| 881 | // } |
| 882 | //} |
| 883 | BOOL CImgCache::LoadShellIcon(struct IMAGE_CACHE_INFO* pItem, BOOL bLargeIcon /*= TRUE*/) |
| 884 | { |
| 885 | HICON hIcon = NULL; |
| 886 | HBITMAP hBmp = NULL; |
| 887 | BOOL lbPreviewWasLoaded = FALSE; |
| 888 | const wchar_t* pszName = pItem->lpwszFileName; |
| 889 | int nDrawRC = -1; |
| 890 | SHFILEINFO sfi = {NULL}; |
| 891 | UINT cbSize = sizeof(sfi); |
| 892 | DWORD_PTR shRc = 0; |
| 893 | RECT rc = {0,0,32,32}; // если иконку удастся загрузить - будет перебито |
| 894 | |
| 895 | if (!CheckLoadDibCreated()) |
| 896 | return FALSE; |
| 897 | |
| 898 | if (!pItem->lpwszFileName) |
| 899 | { |
| 900 | _ASSERTE(pItem->lpwszFileName); |
| 901 | return FALSE; |
| 902 | } |
| 903 | |
| 904 | #ifdef _DEBUG |
| 905 | wchar_t szDbg[MAX_PATH+32]; |
| 906 | lstrcpy(szDbg, L"LoadShell: "); lstrcpyn(szDbg+11, pItem->lpwszFileName, MAX_PATH); |
| 907 | DEBUGSTRLOAD(szDbg); |
| 908 | #endif |
| 909 | |
| 910 | if (pItem->Icon.Pixels && pItem->Icon.cbPixelsSize) |
| 911 | { |
| 912 | memset(pItem->Icon.Pixels, 0, pItem->Icon.cbPixelsSize); |
| 913 | } |
| 914 | |
| 915 | if (pItem->pszComments) |
| 916 | { |
| 917 | pItem->pszComments[0] = 0; |
| 918 | } |
| 919 | |
| 920 | if (pszName[0] == L'.' && pszName[1] == L'.' && pszName[2] == 0) |
| 921 | { |
| 922 | if (!ghUpIcon) |
| 923 | ghUpIcon = LoadIcon(ghPluginModule, MAKEINTRESOURCE(IDI_UP)); |
| 924 | |
| 925 | if (ghUpIcon) |
| 926 | { |
| 927 | hIcon = ghUpIcon; |
| 928 | } |
| 929 | } |
| 930 | else |
| 931 | { |
| 932 | LPCWSTR pszFileName = pItem->lpwszFileName; |
| 933 | DWORD uFlags = SHGFI_ICON|(bLargeIcon?(SHGFI_LARGEICON|SHGFI_SHELLICONSIZE):SHGFI_SMALLICON)|SHGFI_USEFILEATTRIBUTES; |
| 934 | |
| 935 | if (pszFileName && pItem->bVirtualItem) |
| 936 | { |
| 937 | pszFileName = PointToName(pszFileName); |
| 938 | if (!pszFileName || !*pszFileName) |
| 939 | pszFileName = L"File"; |
| 940 |
no test coverage detected