示例#1
0
void CXPGroupBox::OnPaint() {
    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here
    CRect	rectClient;
    GetClientRect(rectClient);

    // Draw white rectangle

    CPen penFrame;
    CBrush brushBKContent(RGB(255,255,255));

    penFrame.CreatePen(PS_SOLID, 1, RGB(0,0,0));
    CPen* pOldPen = dc.SelectObject(&penFrame);

    dc.Rectangle(rectClient);
}
示例#2
0
//////////////////////////////////////////////////////////////////////////
//
// Function:		CTCGroupBox::OnPaint
//
// Description:		Handles all the drawing code for the label
//
// Name                     Date        Version Comments
// Jack Jin					2003-12-03    1.0     Origin
//////////////////////////////////////////////////////////////////////////
void CTCGroupBox::OnPaint()
{
    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here
    CRect	rectClient;
    GetClientRect(rectClient);

    // Defalte Rect
    rectClient.DeflateRect(1,1);

    // Get Text Rect
    CSize sizeText;
    CRect rectText, rectFrame;
    CRect rectTitle, rectContent;

    CFont *pOldFont = dc.SelectObject(&m_font);

    // get Text if need
    //if ( m_strTitle.IsEmpty() )
    //{
    //       GetWindowText(m_strTitle);
    //	//if ( ! m_strTitle.IsEmpty() )
    //		//m_strTitle = _T("") ;//每次加载的时候都会加上,9-3号修改_T(" ") + m_strTitle + _T(" ")
    //}
    //
    //if ( ! m_strTitle.IsEmpty() )
    //{
    sizeText = dc.GetTextExtent(m_strTitle);
    //}
    //else
    //{
    /*sizeText.cx = 0;
    sizeText.cy = 0;*/
    //}
    if( m_strTitle.IsEmpty() )
    {
        sizeText.cx = 0;
        sizeText.cy = 0;
    }

    if ( m_nType == TCGB_FRAME ) // Frame style
    {
        // Calculate Text Rect
        switch(m_dwAlignment)
        {
        case SS_LEFT:
            rectText.top = rectClient.top;
            rectText.left = rectClient.left + 10;

            rectText.bottom = rectText.top + sizeText.cy;
            rectText.right = rectText.left + sizeText.cx;
            break;
        case	SS_CENTER:
            rectText.top = rectClient.top;
            rectText.left = rectClient.left + (rectClient.Width() - sizeText.cx) / 2 ;

            rectText.bottom = rectText.top + sizeText.cy;
            rectText.right = rectText.left + sizeText.cx;
            break;
        case	SS_RIGHT	:
            rectText.top = rectClient.top;
            rectText.right = rectClient.right -10 ;

            rectText.bottom = rectText.top + sizeText.cy;
            rectText.left = rectText.right - sizeText.cx;
            break;
        }

        //  Calculate Frame rect
        rectFrame.left = rectClient.left;
        rectFrame.top = rectClient.top + sizeText.cy/2;

        rectFrame.right = rectClient.right;
        rectFrame.bottom = rectFrame.top + rectClient.Height() - sizeText.cy/2;

        // Draw Frame border
        CPen penFrame;
        CBrush brushBKFrame(m_clrTitleBackground);

        penFrame.CreatePen(PS_SOLID, 1, m_clrBorder);

        CPen* pOldPen = dc.SelectObject(&penFrame);
        CBrush* pOldBrush = (CBrush*)dc.SelectStockObject(NULL_BRUSH);

        dc.RoundRect(rectFrame, CPoint(10,10));

        dc.SelectObject(pOldPen);
        dc.SelectObject(pOldBrush);

        dc.IntersectClipRect(rectText);
        dc.FillSolidRect(rectText, m_clrTitleBackground);
    }
    else  // Windows Style
    {
        // Calculate Title size
        rectTitle.top = rectClient.top;
        rectTitle.left = rectClient.left ;

        rectTitle.right = rectClient.right;
        rectTitle.bottom = rectClient.top + sizeText.cy + 4;

        // Draw Title round rect
        CPen penFrame;
        CBrush brushBKTitle(m_clrTitleBackground);
        CBrush brushBKContent(m_clrClientBackground);

        penFrame.CreatePen(PS_SOLID, 1, m_clrBorder);

        CPen* pOldPen = dc.SelectObject(&penFrame);
        CBrush* pOldBrush = dc.SelectObject(&brushBKTitle);

        dc.RoundRect(rectClient, CPoint(10, 10));

        dc.SelectObject(pOldBrush);

        // Draw content area
        rectContent.left = rectClient.left;
        rectContent.top = rectClient.top + sizeText.cy + 4;

        rectContent.right = rectClient.right;
        rectContent.bottom = rectContent.top + rectClient.Height() - sizeText.cy - 4;

        pOldBrush = dc.SelectObject(&brushBKContent);

        dc.Rectangle(rectContent);

        dc.SelectObject(pOldPen);
        dc.SelectObject(pOldBrush);


        // Calculate Text Rect
        switch(m_dwAlignment)
        {
        case SS_LEFT:
            rectText.top = rectTitle.top + 2;
            rectText.left = rectTitle.left + 2 ;

            rectText.bottom = rectText.top + sizeText.cy;
            rectText.right = rectText.left + sizeText.cx ;
            break;
        case	SS_CENTER:
            rectText.top = rectTitle.top + 2;
            rectText.left = rectTitle.left + (rectTitle.Width() - sizeText.cx) / 2 ;

            rectText.bottom = rectText.top + sizeText.cy;
            rectText.right = rectText.left + sizeText.cx ;
            break;
        case	SS_RIGHT	:
            rectText.top = rectTitle.top + 2;
            rectText.right = rectClient.right - 2  ;

            rectText.bottom = rectText.top + sizeText.cy;
            rectText.left = rectText.right - sizeText.cx;
            break;
        }


    }

    COLORREF clrOldText = dc.SetTextColor(m_clrTitleText);
    UINT nMode = dc.SetBkMode(TRANSPARENT);

    dc.DrawText(m_strTitle, &rectText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOCLIP ); //DT_END_ELLIPSIS);

    // restore DC
    dc.SetBkMode(nMode);
    dc.SetTextColor(clrOldText);
    dc.SelectObject(pOldFont);
}