HICON LoadIcon( HINSTANCE hInstance, LPCTSTR lpIconName );
HANDLE LoadImage( HINSTANCE hinst, LPCTSTR lpszName, UINT uType, int cxDesired, int cyDesired, UINT fuLoad );
일단 두 함수의 프로토타입은 이렇고, MSDN의 LoadIcon 항목에는LoadIcon이 LoadImage로 대체되었다고 한다. 대체라? deprecate된 것들과 차이가 뭔지 잘 모르겠다.
Note This function hase been superseded by the
LoadImage function.
일단 16x16, 32x32, 48x48 크기의 아이콘 리소스가 실행파일에 포함되어 있고 이를 읽어 설정한다고 하면,
HICON icon = ::LoadIcon(isntance, MAKEINTRESOURCE(IDI_ICON)); ::SetClassLongPtr(hwnd, GCLP_HICON, (LONG_PTR)icon);다음과 같이 하면 타이틀과 작업표시줄 버튼의 16x16 아이콘과 ALT+TAB시 48x48크기의 아이콘이 제대로 나온다. 헌데,
HICON icon = (HICON) ::LoadImage(app.getInstance(), MAKEINTRESOURCE(IDI_ICON_EXPLORER), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_LOADTRANSPARENT); ::SetClassLongPtr(app.getHandle(), GCLP_HICON, (LONG_PTR)icon);이렇게 했더니 16x16 크기의 아이콘이 48x48 크기의 아이콘이 축소되벼러서 깨져 나와버렸다. 왜왜왜, 잠시 헤매다가 같은 아이콘 핸들을 GCLP_HICONSM도 설정했더니 잘 나온다.
::SetClassLongPtr(app.getHandle(), GCLP_HICONSM, (LONG_PTR)icon);작은 아이콘 설정이 따로 있다면 어째서 LoadIcon으로 읽은 핸들은 GCLP_HICONSM 없이 GCLP_HICON 설정만으로도 잘 나올까? 무슨 차이가 있는건지 모르겠다. 구글링해보자.