MS功能区:从代码中绘制按钮图标

时间:2014-11-07 23:20:29

标签: c++ button icons ribbon

我尝试创建MS Ribbon按钮图标表单代码。 我用32 bpp创建了CImage。

CImage img;
img.Create(size, size, 32, CImage::createAlphaChannel);

然后我用这个图像像hdc一样用于位图:

HDC hdc = CImageDC(img);
BitBlt(hdc, 0, 0, cx, cy, hdcMem, sx, sy, SRCCOPY);

最后,我使用了UIRibbonImageFromBitmapFactory并将结果设置为属性:

IUIImage* pImg;
CComPtr<IUIImageFromBitmap> pifb;
pifb.CoCreateInstance(CLSID_UIRibbonImageFromBitmapFactory);
pifb->CreateImage(img, UI_OWNERSHIP_TRANSFER, &pImg);
UIInitPropertyFromImage(key, pImg, ppropvarNewValue);

结果所有功能都成功完成但按钮图标为空!!!

我使用了这些要求http://msdn.microsoft.com/en-us/library/windows/desktop/dd316921(v=vs.85).aspx 按钮图标是否需要其他要求?

1 个答案:

答案 0 :(得分:1)

您必须先转换为HBITMAP,然后使用框架工厂生成IUIImage:

// Load the bitmap from the resource file.
CImage img;
hr = img.Load(pszResource);
if (FAILED(hr)) return hr;

HBITMAP hbm = (HBITMAP) img.Detach();
if (hbm)
{
    // Use the factory implemented by the framework to produce an IUIImage.
    hr = m_pifbFactory->CreateImage(hbm, UI_OWNERSHIP_TRANSFER, ppimg);
    if (FAILED(hr))
    {
        DeleteObject(hbm);
    }
}

然后您可以将图像添加到按钮,如

// Set the image as the new property value for the button.
hr = UIInitPropertyFromImage(UI_PKEY_LargeImage, pImg, ppropvarNewValue);
祝你好运!