2014-11-07 5 views
0

MS 리본 메뉴 아이콘 양식 코드를 만들려고합니다. 나는 32bpp로 CImage를 만들었습니다.MS 리본 : 코드에서 단추 아이콘을 그립니다.

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

DC에서 이미지 비트 맵을 선택 해제 한 다음 'CreateImage'에 전달해야합니다. –

+0

선택 항목을 추가했습니다. 결과는 동일합니다. 그러나이 문제를 지적 해 주셔서 감사합니다. – Savka

답변

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); 

행운을 빈다!