가끔 Windows Icon Cache 가 깨져서 다시 생성해야 할 필요가 있다. 보통은 icon cache 파일을 삭제후 재부팅 하거나 바탕화면 등록 정보에서 icon 크기를 바꾸면 된다.
아래 코드는 바탕화면 icon 크기를 변경시켜서 icon cache를 다시 생성하게 만드는 코드이다.
#include <atlbase.h>
/** @brief 윈도우의 아이콘 캐쉬를 다시 빌드한다.
*
* @author Yun-yong Choi
*/
void __cdecl RebuildIconCache(void)
{
CRegKey RegKey; /**< registry interface */
int OldSize = 0; /**< 원래 shell icon 크기를 저장 */
LRESULT lRet = RegKey.Open(HKEY_CURRENT_USER,
"Control Panel\\Desktop\\WindowMetrics",
KEY_ALL_ACCESS);
if (lRet == ERROR_SUCCESS)
{
DWORD dwCnt;
CHAR buf[BUFSIZ] = {0, };
dwCnt = BUFSIZ - 1;
lRet = RegKey.QueryValue(buf, "Shell Icon Size", &dwCnt);
if (lRet != ERROR_SUCCESS)
{
RegKey.Close();
return;
}
OldSize = atoi(buf);
wsprintf(buf, "%ld", OldSize + 1);
RegKey.SetValue(buf, "Shell Icon Size");
SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE,
SPI_SETICONMETRICS, (LPARAM)( "WindowMetrics" ));
if (OldSize > 0)
{
wsprintf(buf, "%ld", OldSize);
RegKey.SetValue(buf, "Shell Icon Size");
SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE,
SPI_SETICONMETRICS, (LPARAM)( "WindowMetrics" ));
}
else
{
RegKey.DeleteValue("Shell Icon Size");
SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE,
SPI_SETICONMETRICS, (LPARAM)( "WindowMetrics" ));
}
RegKey.Close();
}
}