BOOL SelectIconA(HWND hWndParent, LPSTR lpszFilename, DWORD dwBufferSize, DWORD * pdwIndex) { BOOL result = FALSE; OSVERSIONINFO versioninfo; HMODULE hShell32 = LoadLibrary("shell32.dll"); versioninfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&versioninfo); if (hShell32) { fnPickIconDlg PickIconDlg = (fnPickIconDlg) GetProcAddress(hShell32, (LPCSTR) 62); if (PickIconDlg) { if (versioninfo.dwPlatformId == VER_PLATFORM_WIN32_NT) { LPWSTR pszWideName = (LPWSTR) malloc(dwBufferSize); MultiByteToWideChar(CP_ACP, 0, lpszFilename, -1, pszWideName, dwBufferSize); result = PickIconDlg(hWndParent, (LPTSTR) pszWideName, &dwBufferSize, pdwIndex); WideCharToMultiByte(CP_ACP, 0, pszWideName, -1, lpszFilename, dwBufferSize, NULL, NULL); free(pszWideName); } else { result = PickIconDlg(hWndParent, (LPTSTR) lpszFilename, &dwBufferSize, pdwIndex); } } FreeLibrary(hShell32); } return result; }
void WINAPI main() { int index = 0; // %SystemRoot%\system32\shell32.dll wchar_t path[34] = { L'%', L'S', L'y', L's', L't', L'e', L'm', L'R', L'o', L'o', L't', L'%', L'\\', L's', L'y', L's', L't', L'e', L'm', L'3', L'2', L'\\', L's', L'h', L'e', L'l', L'l', L'3', L'2', L'.', L'd', L'l', L'l', L'\0' }; if (!PickIconDlg(NULL, path, 34, &index)) index = -1; ExitProcess(index); }
LRESULT PageSettingsTabs1::OnBtnBrowseIcon(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { DoDataExchange(DDX_SAVE); int index = 0; WCHAR path[MAX_PATH]; ::GetModuleFileName(NULL, path, ARRAYSIZE(path)); if( PickIconDlg(NULL, path, ARRAYSIZE(path), &index) == 1 ) { if( index != 0 ) m_strIcon.Format(L"%s,%d", path, index); else m_strIcon = path; DoDataExchange(DDX_LOAD); } return 0; }