本文整理汇总了C++中CDCHandle::CreateCompatibleDC方法的典型用法代码示例。如果您正苦于以下问题:C++ CDCHandle::CreateCompatibleDC方法的具体用法?C++ CDCHandle::CreateCompatibleDC怎么用?C++ CDCHandle::CreateCompatibleDC使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CDCHandle
的用法示例。
在下文中一共展示了CDCHandle::CreateCompatibleDC方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DrawItem
void CDuiMenuODWnd::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
CRect rcItem=lpDrawItemStruct->rcItem;
DuiMenuItemData *pdmmi=(DuiMenuItemData*)lpDrawItemStruct->itemData;
CDCHandle dc(lpDrawItemStruct->hDC);
CDCHandle dcMem;
dcMem.CreateCompatibleDC(dc);
CBitmap bmp=CGdiAlpha::CreateBitmap32(dc,rcItem.Width(),rcItem.Height());
CBitmapHandle hOldBmp=dcMem.SelectBitmap(bmp);
dcMem.BitBlt(0,0,rcItem.Width(),rcItem.Height(),dc,rcItem.left,rcItem.top,SRCCOPY);
rcItem.MoveToXY(0,0);
if(pdmmi)
{
MENUITEMINFO mii= {sizeof(MENUITEMINFO),MIIM_FTYPE,0};
HMENU menuPopup=pdmmi->hMenu;
GetMenuItemInfo(menuPopup,pdmmi->nID,FALSE,&mii);
BOOL bDisabled = lpDrawItemStruct->itemState & ODS_GRAYED;
BOOL bSelected = lpDrawItemStruct->itemState & ODS_SELECTED;
BOOL bChecked = lpDrawItemStruct->itemState & ODS_CHECKED;
BOOL bRadio = mii.fType&MFT_RADIOCHECK;
m_pItemSkin->Draw(dcMem,rcItem,bSelected?1:0); //draw back
//draw icon
CRect rcIcon;
rcIcon.left=rcItem.left+m_nIconMargin;
rcIcon.right=rcIcon.left+m_szIcon.cx;
rcIcon.top=rcItem.top+(rcItem.Height()-m_szIcon.cy)/2;
rcIcon.bottom=rcIcon.top+m_szIcon.cy;
if(bChecked)
{
if(m_pCheckSkin)
{
if(bRadio) m_pCheckSkin->Draw(dcMem,rcIcon,1);
else m_pCheckSkin->Draw(dcMem,rcIcon,0);
}
}
else if(pdmmi->itemInfo.iIcon!=-1 && m_pIconSkin)
{
m_pIconSkin->Draw(dcMem,rcIcon,pdmmi->itemInfo.iIcon);
}
rcItem.left=rcIcon.right+m_nIconMargin;
//draw text
CRect rcTxt=rcItem;
rcTxt.DeflateRect(m_nTextMargin,0);
dcMem.SetBkMode(TRANSPARENT);
COLORREF crOld=dcMem.SetTextColor(bDisabled?m_crTxtGray:(bSelected?m_crTxtSel:m_crTxtNormal));
HFONT hOldFont=0;
hOldFont=dcMem.SelectFont(m_hFont);
dcMem.DrawText(pdmmi->itemInfo.strText,pdmmi->itemInfo.strText.GetLength(),&rcTxt,DT_SINGLELINE|DT_VCENTER|DT_LEFT);
dcMem.SelectFont(hOldFont);
dcMem.SetTextColor(crOld);
if(bSelected && m_pItemSkin->GetStates()>2)
{
//draw select mask
CRect rcItem=lpDrawItemStruct->rcItem;
rcItem.MoveToXY(0,0);
m_pItemSkin->Draw(dcMem,rcItem,2);
}
}
else //if(strcmp("sep",pXmlItem->Value())==0)
{
m_pItemSkin->Draw(dcMem,rcItem,0); //draw back
if(m_pIconSkin)
{
rcItem.left += m_pIconSkin->GetSkinSize().cx+m_nIconMargin*2;
}
if(m_pSepSkin)
m_pSepSkin->Draw(dcMem,&rcItem,0);
else
{
CGdiAlpha::DrawLine(dcMem, rcItem.left, rcItem.top, rcItem.right, rcItem.top, RGB(196,196,196), PS_SOLID);
CGdiAlpha::DrawLine(dcMem, rcItem.left, rcItem.top+1, rcItem.right, rcItem.top+1, RGB(255,255,255), PS_SOLID);
}
}
rcItem=lpDrawItemStruct->rcItem;
dc.BitBlt(rcItem.left,rcItem.top,rcItem.Width(),rcItem.Height(),dcMem,0,0,SRCCOPY);
dcMem.SelectBitmap(hOldBmp);
dcMem.DeleteDC();
bmp.DeleteObject();
}