Ejemplo n.º 1
0
void STabCtrl::DrawItem(IRenderTarget *pRT,const CRect &rcItem,int iItem,DWORD dwState )
{
    if(rcItem.IsRectEmpty()) return;
    int iState = IIF_STATE3(dwState,WndState_Normal,WndState_Hover,WndState_PushDown);
    if(m_pSkinTab)
        m_pSkinTab->Draw(pRT,rcItem,iState);

    //根据状态从style中获得字体,颜色
    IFontPtr font=m_style.GetTextFont(iState);
    COLORREF crTxt = m_style.GetTextColor(iState);
    CAutoRefPtr<IFont> oldFont;
    if(font) pRT->SelectObject(font,(IRenderObj**)&oldFont);
    COLORREF crOld = 0;
    if(crTxt != CR_INVALID) crOld = pRT->SetTextColor(crTxt);
    
    CRect rcIcon(m_ptIcon+rcItem.TopLeft(),CSize(0,0));
    if(m_pSkinIcon)
    {
        rcIcon.right=rcIcon.left+m_pSkinIcon->GetSkinSize().cx;
        rcIcon.bottom=rcIcon.top+m_pSkinIcon->GetSkinSize().cy;
        int iIcon=GetItem(iItem)->GetIconIndex();
        if(iIcon == -1) iIcon = iItem;
        m_pSkinIcon->Draw(pRT,rcIcon,iIcon);
    }

    if(m_ptText.x!=-1 && m_ptText.y!=-1)
    {//从指定位置开始绘制文字
        pRT->TextOut(rcItem.left+m_ptText.x,rcItem.top+m_ptText.y,GetItem(iItem)->GetTitle(),-1);
    }
    else
    {
        CRect rcText=rcItem;
        UINT alignStyle=m_style.GetTextAlign();
        UINT align=alignStyle;
        if(m_ptText.x==-1 && m_ptText.y!=-1)
        {//指定了Y偏移,X居中
            rcText.top+=m_ptText.y;
            align=alignStyle&(DT_CENTER|DT_RIGHT|DT_SINGLELINE|DT_END_ELLIPSIS);
        }
        else if(m_ptText.x!=-1 && m_ptText.y==-1)
        {//指定了X偏移,Y居中
            rcText.left+=m_ptText.x;
            align=alignStyle&(DT_VCENTER|DT_BOTTOM|DT_SINGLELINE|DT_END_ELLIPSIS);
        }
        
        pRT->DrawText(GetItem(iItem)->GetTitle(),-1,&rcText,align);
    }
    
    //恢复字体,颜色
    if(font) pRT->SelectObject(oldFont);
    if(crTxt!=CR_INVALID) pRT->SetTextColor(crOld);
}
Ejemplo n.º 2
0
    void SComboBase::OnPaint(IRenderTarget * pRT )
    {
        SPainter painter;

        BeforePaint(pRT, painter);
        if(GetCurSel() != -1 && m_pEdit==NULL)
        {
            CRect rcText;
            GetTextRect(rcText);
            SStringT strText=GetWindowText();
            DrawText(pRT,strText, strText.GetLength(), rcText, GetTextAlign());
        }
        //draw focus rect
        if(IsFocused())
        {
            DrawFocus(pRT);
        }
        AfterPaint(pRT, painter);
        CRect rcBtn;
        GetDropBtnRect(&rcBtn);
        m_pSkinBtn->Draw(pRT,rcBtn,IIF_STATE3(m_dwBtnState,WndState_Normal,WndState_Hover,WndState_PushDown));
    }