インフォチップのテキストの取得

(2003.09.18)
#pragma once
 
 
/////////////////////////////////////////////////////////////////////////////
// CQueryInfoHelper
 
class CQueryInfoHelper
{
public:
    CQueryInfoHelper();                            // 実装しない
    virtual ~CQueryInfoHelper();
 
public:
    static CString GetInfoTip(HWND hWnd, IShellFolderPtr spShellFolder, LPCITEMIDLIST pidl)
    {
        USES_CONVERSION;
 
        if (spShellFolder == NULL || pidl == NULL)
        {
            return CString();
        }
 
        HRESULT hr = S_OK;
 
        IQueryInfoPtr spQueryInfo;
        hr = spShellFolder->GetUIObjectOf(hWnd, 1, &pidl, IID_IQueryInfo, NULL, (void**)&spQueryInfo);
        if (FAILED(hr))
        {
            return CString();
        }
 
        return GetInfoTip(spQueryInfo);
    }
    static CString GetInfoTip(IQueryInfoPtr spQueryInfo)
    {
        USES_CONVERSION;
 
        if (spQueryInfo == NULL)
        {
            return CString();
        }
 
        HRESULT hr = S_OK;
 
        LPWSTR wszText = 0;
        hr = spQueryInfo->GetInfoTip(0, &wszText);
        if (FAILED(hr))
        {
            return CString();
        }
 
        CString strResult = W2T(wszText);
        
        Emulate_SHFree(wszText);
 
        return strResult;
    }
 
public:
    // Shlwapihelper.hよりコピー
    // shell32.dll version 5.0 or later 互換
    static void Emulate_SHFree(void* pv)
    {
        HRESULT hr = S_OK;
 
        IMallocPtr spMalloc;
        hr = ::SHGetMalloc(&spMalloc);
        if (FAILED(hr))
        {
            return;
        }
 
        spMalloc->Free(pv);
    }
};
一覧に戻る
© 2003 WAC.com All Right Reserved.