我尝试创建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 按钮图标是否需要其他要求?
答案 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);
祝你好运!