in Docs-ContextMenuSample/ExplorerCommandVerb/ShellHelpers.h [109:139]
__inline HRESULT SetItemImageImageInStaticControl(HWND hwndStatic, IShellItem *psi)
{
HBITMAP hbmp = NULL;
HRESULT hr = S_OK;
if (psi)
{
IShellItemImageFactory *psiif;
hr = psi->QueryInterface(IID_PPV_ARGS(&psiif));
if (SUCCEEDED(hr))
{
RECT rc;
GetWindowRect(hwndStatic, &rc);
const UINT dxdy = min(rc.right - rc.left, rc.bottom - rc.top); // make it square
const SIZE size = { dxdy, dxdy };
hr = psiif->GetImage(size, SIIGBF_RESIZETOFIT, &hbmp);
psiif->Release();
}
}
if (SUCCEEDED(hr))
{
HGDIOBJ hgdiOld = (HGDIOBJ) SendMessage(hwndStatic, STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) hbmp);
if (hgdiOld)
{
DeleteObject(hgdiOld); // if there was an old one clean it up
}
}
return hr;
}