VC学习之二,简单绘图
来源:互联网 发布:淘宝主营类目如何更改 编辑:程序博客网 时间:2024/04/29 20:29
涉及到的类:
HDC :Handle to a device context
HDC hdc ;
hdc = ::GetDC(m_hWnd);
//移动
MoveToEx(hdc,m_ptOrigin.x,m_ptOragin.y,NULL);
//画线
LineTo(hdc,point.x,point.y);
//释放设备描述表
::ReleaseDC(m_hWnd,hdc);
注:需要调用::ReleaseDC(m_hWnd,hdc);释放
::GetDC,::ReleaseDC 加2个冒号,表示是全局的SDK函数,否则则VC则会认为是类的成员函数
CDC:MFC提供的一个设备描述表的封装类
CDC* pDC = GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
CClientDC:MFC的CClientDC,实现画线
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
注:CClientDC生命周期结束后,会自动释放所占用的设备资源,不用手动调Release
CWindowDC:MFC提供的CWindowDC,可实现在整个窗口区域画图,包括框架窗口和客户区
CWindowDC dc(this);
//可实现在框架上画图
//CWindowDC dc(GetParent());
//在桌面上画线
//CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
注:CWindowDC不用手动调用Release同上。
CPen:画笔对象
CPen pen(PS_SOLID,1,RGB(255,0,0));
CClientDC dc(this);
//选入设备描述表
CPen* pOldPen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
//恢复之前的设备描述
dc.SelectObject(pOldPen);
注:构建GDI对象后,需要选入设备描述表才可生效
CBrush:画刷
//创建红色画刷
CBrush brush(RGB(255,0,0));
//创建并获得设备描述表
CClientDC dc(this);
//利用红色画刷填充矩形区域
dc.FillRect(CRect(m_ptOrigin,point),&brush);
位图画刷
//创建位图
CBitmap bitmap;
//加载资源
bitmap.LoadBitmap(IDB_BITMAP1);
//创建位图画刷
CBrush brush(&bitmap);
CClient dc(this);
//用位图刷新填充区域
dc.FillRect(CRect(m_ptOrigin,point),&brush);
透明画刷,直接通过dc.Rectangle
CClientDC dc(this);
//绘制一个矩形,dc设备描述表默认有一个白色的画刷
dc.Rectangle(CRect(m_ptOrigin,point));
利用GetStockObject 获取一个画刷句柄,通过CBursh.FromHandle 将画刷句柄转换成画刷对象
//创建并获得设备描述表
CClientDC dc(this);
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
//将空画刷选入设备描述表
CBrush *pOldBrush = dc.SelectObject(pBrush);
//绘制一个矩形
dc.Rectangle(CRect(m_ptOrigin,point));
//恢复之间的画刷
dc.SelectObject(pOldBrush);
之前使用的dc.FillRect函数和这里的dc.Rectangle函数,二者都是用画刷画矩形,前者在参数中提供了绘制使用的画刷,因此可以直接利用此画刷画图,不需要调用SelectObject选入设备描述表,后者并没有提供画刷参数,因些要调用SelectObject
dc.DrawText 输出字符
CClientDC dc(this);
TEXTMETRIC tm;//获得当前设备描述表中的字体高度信息dc.GetTextMetrics(&tm);CRect rect;rect.left=0;rect.top=200;rect.right=m_nWidth;rect.bottom=rect.top+tm.tmHeight;//设置文本颜色dc.SetTextColor(RGB(255,0,0));CString str;str.LoadString(IDS_WEIXIN);dc.DrawText(str,rect,DT_LEFT);rect.top=150;rect.bottom=rect.top+tm.tmHeight;dc.DrawText(str,rect,DT_RIGHT);CSize sz=dc.GetTextExtent(str);if(m_nWidth>sz.cx){m_nWidth=0;dc.SetTextColor(RGB(0,255,0));dc.TextOut(0,200,str);}
- VC学习之二,简单绘图
- VC++学习之简单绘图
- MFC学习笔记之简单绘图二
- MFC学习笔记之简单绘图二
- vc学习笔记之简单绘图(第四章)
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- 从零开始学习OpenGL ES之二 – 简单绘图概述
- OpenGL ES之二 – 简单绘图
- VC中的简单绘图
- VC----MFC-简单绘图
- YII实现ThinkPHP的表单令牌
- python中全局变量的使用
- mina
- 弹出层
- python中string和bool的转换
- VC学习之二,简单绘图
- wamp You don't have permission to access / on this server等问题的解决.
- YII 内部问题 session和memcache小问题
- 网络上关于memecached与redis的汇总
- #和##运算符使用解析
- python中http的一些编码转换
- YII 监听器的使用
- 公约数和公倍数
- c/c++ 标准预定义宏