本文整理汇总了C++中CAutoRefPtr::SelectObject方法的典型用法代码示例。如果您正苦于以下问题:C++ CAutoRefPtr::SelectObject方法的具体用法?C++ CAutoRefPtr::SelectObject怎么用?C++ CAutoRefPtr::SelectObject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CAutoRefPtr
的用法示例。
在下文中一共展示了CAutoRefPtr::SelectObject方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: MakeCacheApha
void SImageMaskWnd::MakeCacheApha(ISkinObj *pSkin)
{
SASSERT(m_bmpMask && m_bmpCache);
CAutoRefPtr<IRenderTarget> pRTDst;
GETRENDERFACTORY->CreateRenderTarget(&pRTDst,0,0);
CAutoRefPtr<IRenderObj> pOldBmp;
pRTDst->SelectObject(m_bmpCache,&pOldBmp);
CRect rc(CPoint(0,0),m_bmpCache->Size());
pSkin->Draw(pRTDst,&rc,0);
pRTDst->SelectObject(pOldBmp);
//从mask的指定channel中获得alpha通道
LPBYTE pBitCache = (LPBYTE)m_bmpCache->LockPixelBits();
LPBYTE pBitMask = (LPBYTE)m_bmpMask->LockPixelBits();
LPBYTE pDst = pBitCache;
LPBYTE pSrc = pBitMask + m_iMaskChannel;
int nPixels = m_bmpCache->Width()*m_bmpCache->Height();
for(int i=0;i<nPixels;i++)
{
BYTE byAlpha = *pSrc;
pSrc += 4;
*pDst++ = ((*pDst) * byAlpha)>>8;//做premutiply
*pDst++ = ((*pDst) * byAlpha)>>8;//做premutiply
*pDst++ = ((*pDst) * byAlpha)>>8;//做premutiply
*pDst++ = byAlpha;
}
m_bmpCache->UnlockPixelBits(pBitCache);
m_bmpMask->UnlockPixelBits(pBitMask);
}
示例2: MeasureItem
void SMenuODWnd::MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
{
if(lpMeasureItemStruct->CtlType != ODT_MENU) return;
SMenuItemData *pdmmi=(SMenuItemData*)lpMeasureItemStruct->itemData;
if(pdmmi)
{
//menu item
lpMeasureItemStruct->itemHeight = m_nItemHei;
lpMeasureItemStruct->itemWidth = m_szIcon.cx+m_nIconMargin*2;
CAutoRefPtr<IRenderTarget> pRT;
GETRENDERFACTORY->CreateRenderTarget(&pRT,0,0);
CAutoRefPtr<IFont> oldFont;
pRT->SelectObject(m_hFont,(IRenderObj**)&oldFont);
SIZE szTxt;
pRT->MeasureText(pdmmi->itemInfo.strText,pdmmi->itemInfo.strText.GetLength(),&szTxt);
lpMeasureItemStruct->itemWidth += szTxt.cx+m_nTextMargin*2;
pRT->SelectObject(oldFont);
}
else
{
// separator
lpMeasureItemStruct->itemHeight = m_pSepSkin?m_pSepSkin->GetSkinSize().cy:3;
lpMeasureItemStruct->itemWidth=0;
}
}
示例3: MakeCacheApha
void SQrCtrl::MakeCacheApha( ISkinObj *pSkin, IBitmap *_pBitCache, IBitmap *_pBitMask )
{
CAutoRefPtr<IRenderTarget> pRTDst;
GETRENDERFACTORY->CreateRenderTarget(&pRTDst, 0, 0);
CAutoRefPtr<IRenderObj> pOldBmp;
pRTDst->SelectObject(_pBitCache, &pOldBmp);
CRect rc(CPoint(0, 0), _pBitCache->Size());
pSkin->Draw(pRTDst, &rc, 0);
CAutoRefPtr<IBitmap> bmp;
GETRENDERFACTORY->CreateBitmap(&bmp);
if (m_QrRect.IsRectEmpty())
{
bmp = _pBitMask;
}
else
{
bmp->Init(m_QrRect.Width(), m_QrRect.Height());
pRTDst->SelectObject(bmp, NULL);
CRect rcSrc(CPoint(0, 0), _pBitMask->Size());
rc = CRect(CPoint(0, 0), bmp->Size());
pRTDst->DrawBitmapEx(rc, _pBitMask, rcSrc, MAKELONG(EM_STRETCH, m_fl));
pRTDst->SelectObject(pOldBmp);
}
int nDesLinePixels = _pBitCache->Width();
int nDesRowPixels = _pBitCache->Height();
int nline = bmp->Height();
int nRow = bmp->Width();
if ((nDesRowPixels < nRow + m_QrRect.top) || (nDesLinePixels < nline + m_QrRect.left))
return;
LPDWORD pBitCache = (LPDWORD)_pBitCache->LockPixelBits();
LPDWORD pBitMask = (LPDWORD)bmp->LockPixelBits();
LPDWORD pDst = pBitCache;
LPDWORD pSrc = pBitMask;
LPDWORD pLine = pDst + m_QrRect.top * nDesLinePixels;
for (int line = 0; line < nline; line++)
{
LPDWORD pLineData = pLine + m_QrRect.left;
for (int row = 0; row < nRow; row++)
{
LPBYTE byAlpha = (LPBYTE)(pSrc + row);
if (byAlpha[3] == 0)
{
LPDWORD pByteAlpha = (pLineData + row);
*pByteAlpha =RGBA(0,0,0,0);
}
}
pSrc += nRow;
pLine += nDesLinePixels;
}
_pBitCache->UnlockPixelBits(pBitCache);
bmp->UnlockPixelBits(pBitMask);
}
示例4: Draw
RECT SCaret::Draw(IRenderTarget *pRT,int x, int y,BOOL bErase)
{
SWindow * pOwner = SWindowMgr::GetWindow(m_owner);
SASSERT(pOwner);
SASSERT(pOwner->IsFocusable());
CAutoRefPtr<IRenderTarget> pRTCaret;
GETRENDERFACTORY->CreateRenderTarget(&pRTCaret,0,0);
pRTCaret->SelectObject(m_bmpCaret);
CSize szCaret = m_bmpCaret->Size();
CRect rcCaret(CPoint(x,y),szCaret);
CRect rcWnd = pOwner->GetClientRect();
SWindow *pWnd = pOwner->GetParent();
while(pWnd)
{
CRect rcLimit = pWnd->GetClientRect();
rcWnd = rcWnd & rcLimit;
pWnd = pWnd->GetParent();
}
pOwner->GetContainer()->FrameToHost(rcWnd);
CRect rcCaretShow = rcCaret & rcWnd;
pRT->BitBlt(&rcCaretShow,pRTCaret,rcCaretShow.left - rcCaret.left,rcCaretShow.top - rcCaret.top,DSTINVERT);
return rcCaretShow;
}
示例5: DrawItem
void SMenuODWnd::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
CRect rcItem=lpDrawItemStruct->rcItem;
rcItem.MoveToXY(0,0);
SMenuItemData *pdmmi=(SMenuItemData*)lpDrawItemStruct->itemData;
HDC dc(lpDrawItemStruct->hDC);
CAutoRefPtr<IRenderTarget> pRT;
GETRENDERFACTORY->CreateRenderTarget(&pRT,rcItem.Width(),rcItem.Height());
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(pRT,rcItem,bSelected?1:0); //draw background
//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)
{
m_pCheckSkin->Draw(pRT,rcIcon,bRadio?1:0);
}
}
else if(pdmmi->itemInfo.iIcon!=-1 && m_pIconSkin)
{
m_pIconSkin->Draw(pRT,rcIcon,pdmmi->itemInfo.iIcon);
}
rcItem.left=rcIcon.right+m_nIconMargin;
//draw text
CRect rcTxt=rcItem;
rcTxt.DeflateRect(m_nTextMargin,0);
COLORREF crOld=pRT->SetTextColor(bDisabled?m_crTxtGray:(bSelected?m_crTxtSel:m_crTxtNormal));
CAutoRefPtr<IFont> oldFont;
pRT->SelectObject(m_hFont,(IRenderObj**)&oldFont);
pRT->DrawText(pdmmi->itemInfo.strText,pdmmi->itemInfo.strText.GetLength(),&rcTxt,DT_SINGLELINE|DT_VCENTER|DT_LEFT);
pRT->SelectObject(oldFont);
pRT->SetTextColor(crOld);
if(bSelected && m_pItemSkin->GetStates()>2)
{
//draw select mask
CRect rcItem=lpDrawItemStruct->rcItem;
rcItem.MoveToXY(0,0);
m_pItemSkin->Draw(pRT,rcItem,2);
}
}
else //if(strcmp("sep",pXmlItem->Value())==0)
{
m_pItemSkin->Draw(pRT,rcItem,0); //draw back
if(m_pIconSkin)
{
rcItem.left += m_pIconSkin->GetSkinSize().cx+m_nIconMargin*2;
}
if(m_pSepSkin)
m_pSepSkin->Draw(pRT,&rcItem,0);
else
{
CAutoRefPtr<IPen> pen1,pen2,oldPen;
pRT->CreatePen(PS_SOLID,RGBA(196,196,196,255),1,&pen1);
pRT->CreatePen(PS_SOLID,RGBA(255,255,255,255),1,&pen2);
pRT->SelectObject(pen1,(IRenderObj**)&oldPen);
POINT pts[2]={{rcItem.left,rcItem.top},{rcItem.right,rcItem.top}};
pRT->DrawLines(pts,2);
pRT->SelectObject(pen2);
pts[0].y++,pts[1].y++;
pRT->DrawLines(pts,2);
pRT->SelectObject(oldPen);
}
}
rcItem=lpDrawItemStruct->rcItem;
HDC hmemdc=pRT->GetDC(0);
BitBlt(dc,rcItem.left,rcItem.top,rcItem.Width(),rcItem.Height(),hmemdc,0,0,SRCCOPY);
pRT->ReleaseDC(hmemdc);
}