Beispiel #1
0
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;
}