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
- MFC+GDI控件自绘(1):渲染工具
- MFC+GDI控件自绘(2):控件类
- MFC+GDI控件自绘(3):图像按钮(ImageButton)
- MFC 自绘控件
- 自绘控件(mfc)
- MFC 控件自绘
- vc SDK山寨spy++ FinderTool工具(靶心控件)纯GDI自绘
- MFC自绘控件常识
- MFC之自绘控件
- MFC之自绘控件
- MFC自绘TAB控件
- 怎样学好MFC中各个控件编程或者GDI编程,举例说明和源码下载:比如怎样自绘菜单,按钮,工具条或Tab控件
- 【C++自绘控件】如何用GDI+来显示图片
- MFC 之 CButton 控件重绘(GDI篇)
- MFC 之 CButton 控件重绘(GDI+篇)
- MFC 之 CButton 控件重绘(GDI篇)
- 【MFC控件自绘】VC控件自绘制
- MFC自绘控件学习总结(1)
- SAS ARIMA 模型
- Java张孝祥视频 学习笔记 代理
- centos7网络设置静态ip
- Flex异步调用小结
- jquery的ajax同步和异步
- MFC+GDI控件自绘(1):渲染工具
- Android自定义控件
- 2016计划
- SAS PRINCOMP 主成分分析
- The Wind River Registry on host "localhost" died unexpectedly
- 打造RecyclerView的通用适配器
- Eclipse项目导入Android Studio错误积累
- QT正规滚屏放单平台1241万人刷单18部诚信推荐
- SAS Fastclus & Princomp