MFC+GDI控件自绘(1):渲染工具

来源:互联网 发布:淘宝怎么看总销售额 编辑:程序博客网 时间:2024/04/29 20:35

CRender.h

namespace MTUI{    class CRender    {    public:        static void DrawImage(CDC & dc, LPCTSTR lpszFilePath, CRect rt);        static void DrawRect(CDC & dc, LPRECT lpRect, DWORD dwBkColor, DWORD dwBorderColor, UINT uBorderWidth = 1, UINT uBorderStype = PS_SOLID, BOOL bHollow = FALSE);        static void DrawRoundRect(CDC & dc, LPRECT lpRect, int nSize, int width, int height, DWORD dwPenColor);        static void DrawLine(CDC & dc, LPRECT lpRect, int nSize, DWORD dwPenColor, int nStyle = PS_SOLID);        static void DrawText(CDC & dc, LPRECT lpRect, LPCTSTR lpszText, DWORD dwTextColor, UINT uFormat);    public:        static UINT GetWidth(LPRECT lpRect);        static UINT GetHeight(LPRECT lpRect);    };}

CRender.cpp

namespace MTUI{    void CRender::DrawImage(CDC & dc, LPCTSTR lpszFilePath, CRect rt)    {        ASSERT(::GetObjectType(dc.m_hDC) == OBJ_DC || ::GetObjectType(dc.m_hDC) == OBJ_MEMDC);        HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, lpszFilePath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);        if (nullptr == hBitmap)            return;        BITMAP bmp;        ::GetObject(hBitmap, sizeof(BITMAP), &bmp);        CDC memDC;        memDC.CreateCompatibleDC(&dc);        memDC.SelectObject(hBitmap);        dc.SetStretchBltMode(HALFTONE);        dc.StretchBlt(rt.left, rt.top, rt.Width(), rt.Height(), &memDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);        memDC.DeleteDC();        ::DeleteObject(hBitmap);    }    void CRender::DrawRect(CDC & dc, LPRECT lpRect, DWORD dwBkColor, DWORD dwBorderColor, UINT uBorderWidth /* = 1 */, UINT uBorderStype /* = PS_SOLID */, BOOL bHollow /* = FALSE */)    {        ASSERT(::GetObjectType(dc.m_hDC) == OBJ_DC || ::GetObjectType(dc.m_hDC) == OBJ_MEMDC);        CPen pen;        pen.CreatePen(uBorderStype, uBorderWidth, RGB(GetRValue(dwBorderColor), GetGValue(dwBorderColor), GetBValue(dwBorderColor)));        HPEN hOldPen = (HPEN)dc.SelectObject(&pen);        if (bHollow)        {            HBRUSH hOldBrush = (HBRUSH)dc.SelectObject(::GetStockObject(HOLLOW_BRUSH));            dc.Rectangle(lpRect);            dc.SelectObject(hOldBrush);        }        else        {            dc.FillSolidRect(lpRect, RGB(GetRValue(dwBkColor), GetGValue(dwBkColor), GetBValue(dwBkColor)));            dc.Rectangle(lpRect);        }        dc.SelectObject(hOldPen);        pen.DeleteObject();    }    void CRender::DrawRoundRect(CDC & dc, LPRECT lpRect, int nSize, int width, int height, DWORD dwPenColor)    {        ASSERT(::GetObjectType(dc.m_hDC) == OBJ_DC || ::GetObjectType(dc.m_hDC) == OBJ_MEMDC);        CPen pen;        pen.CreatePen(PS_SOLID | PS_INSIDEFRAME, nSize, RGB(GetBValue(dwPenColor), GetGValue(dwPenColor), GetRValue(dwPenColor)));        HPEN hOldPen = (HPEN)dc.SelectObject(&pen);        dc.SelectObject(::GetStockObject(HOLLOW_BRUSH));        dc.RoundRect(lpRect, CPoint(width, height));        dc.SelectObject(hOldPen);        pen.DeleteObject();    }    void CRender::DrawLine(CDC & dc, LPRECT lpRect, int nSize, DWORD dwPenColor, int nStyle /* = PS_SOLID */)    {        ASSERT(::GetObjectType(dc.m_hDC) == OBJ_DC || ::GetObjectType(dc.m_hDC) == OBJ_MEMDC);        CPen pen;        pen.CreatePen(nStyle, nSize, RGB(GetBValue(dwPenColor), GetGValue(dwPenColor), GetRValue(dwPenColor)));        HPEN hOldPen = (HPEN)dc.SelectObject(&pen);        dc.MoveTo(lpRect->left, lpRect->top);        dc.LineTo(lpRect->right, lpRect->bottom);        dc.SelectObject(hOldPen);        pen.DeleteObject();    }    void CRender::DrawText(CDC & dc, LPRECT lpRect, LPCTSTR lpszText, DWORD dwTextColor, UINT uFormat)    {        ASSERT(::GetObjectType(dc.m_hDC) == OBJ_DC || ::GetObjectType(dc.m_hDC) == OBJ_MEMDC);        dc.SetBkMode(TRANSPARENT);        dc.SetTextColor(RGB(GetRValue(dwTextColor), GetGValue(dwTextColor), GetBValue(dwTextColor)));        dc.DrawText(lpszText, _tcslen(lpszText), lpRect, uFormat);    }    UINT CRender::GetWidth(LPRECT lpRect)    {        return lpRect->right - lpRect->left;    }    UINT CRender::GetHeight(LPRECT lpRect)    {        return lpRect->bottom - lpRect->top;    }

GDI绘制,暂时绘制工具这么多,若需要其他的绘制过程,则在后面继续添加。

0 0
原创粉丝点击