MFC下按钮自绘的实现(三)

=============================================================

标题:MFC下按钮自绘的实现(三)

摘要:

备注:MFC + VC2005

日期:2010.7.20

姓名:朱铭雷

=============================================================

       按钮的绘制主要在DrawItem函数中来完成,下面来简单的绘制一下。

 第一步先绘制按钮的外边框。定义了一个成员变量:

       CPen m_OutBorderPen;

       这是一个用来绘制按钮外边框的画笔,在类的构造函数中创建它,在类的析构函数中销毁之。然后在DrawItem函数中开始绘制按钮的外边框:

       CRect rect = lpDrawItemStruct->rcItem;

       CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

       int nSavedDC = pDC->SaveDC();

 

       // 绘制按钮的外边框

       POINT pt;

       pt.x = 5;

       pt.y = 5;

       CPen *pOldPen = pDC->SelectObject(&m_OutBorderPen);

       pDC->RoundRect(&rect, pt);

       pDC->SelectObject(pOldPen);

       编译之后执行一下程序,看下效果:

       MFC下按钮自绘的实现(三)_第1张图片

       按钮的轮廓出来了。

       第二步绘制按钮的底色。

       // 绘制按钮的底色

       rect.DeflateRect(3, 3, 3, 3);

       CBrush *pOldBrush = pDC->SelectObject(&m_BackgroundBrush);

       pDC->Rectangle(rect);

       pDC->SelectObject(pOldBrush);

       这里只是简单的示范一下而已,画出来的按钮不一定好看。这里将按钮的底色设置为纯白色。程序的执行效果如下:

       MFC下按钮自绘的实现(三)_第2张图片

       第三步绘制按钮的文本。

       // 绘制按钮文本

       TCHAR strButtonText[MAX_PATH + 1];

       ::GetWindowText(m_hWnd, strButtonText, MAX_PATH); // 获取按钮文本

       if (strButtonText != NULL)

       {

              CFont *pFont = GetFont();

              CFont *pOldFont = pDC->SelectObject(pFont);

              CSize szExtent = pDC->GetTextExtent(strButtonText, _tcslen(strButtonText));

              CRect rectText = lpDrawItemStruct->rcItem;

              rectText.DeflateRect(rect.CenterPoint().x - szExtent.cx / 2, rect.CenterPoint().y - szExtent.cy / 2, rect.CenterPoint().x - szExtent.cx / 2, rect.CenterPoint().y - szExtent.cy / 2);

              int nOldBkMode = pDC->SetBkMode(TRANSPARENT);

              pDC->DrawText(strButtonText, -1, rectText, DT_WORDBREAK | DT_CENTER);

              pDC->SelectObject(pOldFont);

              pDC->SetBkMode(nOldBkMode);

       }

       重新编译,执行效果如下:

       MFC下按钮自绘的实现(三)_第3张图片

       按钮的基本外观已经绘制出来了。接下来还要绘制按钮按下时,光标滑过时,光标离开时等等状态下按钮的外观。当然还要探索一下圆形按钮,三角形按钮,以及不规则图形按钮的绘制。累了,先写到这里。

      

你可能感兴趣的:(null,mfc,Path,图形,2010)