MFC绘图[1]--几种绘图方式和几种图形绘制
2009-07-05 22:24
190 查看
MFC的4种作图方式
如果我们是在View类的OnDraw函数中作图 我们大可直接使用函数传进来的CDC参数进行作图
在其他函数里面 我们可以使用一下方法作图:
1.利用全局函数
HDC hdc; //定义一个设备描述表的句柄(DC是设备描述表 而HDC这是DC的句柄 H:handle)
hdc=::GetDC(m_hWnd);//获得当前窗口的DC
////这里执行绘图操作 利用全局函数
::ReleaseDC(m_hWnd,hdc);
这里需要注意的是:机会在每个MFC的窗口类中(按钮,编辑框等也是一个窗口) 都有一个HWND类型数据成员m_hWnd,
又来表示当前窗口句柄。我们经常会利用到这个句柄。
GetDC() ReleaseDC()的使用要配对 如果只使用了前者 而不使用后者 会造成内存泄露
2.CDC绘图
CDC是MFC 中DC的一个类
CDC *pDC=GetDC();
//这里绘图 利用CDC提供的绘图函数
ReleaseDC(pdc);
3.利用CClientDC绘图
CClientDC是CDC的一个子类 它在自己的内部封装了GetDC,ReleaseDC函数 所以不用我们显式去调用者2个函数进行构建和释放
CClientDC ccd(this);
//直接绘图 利用CClientDC提供的绘图函数
4.利用CWindow绘图
CWindowDC dc(GetDesktopWindow());//GetDesktopWindow返回一个桌面窗口的一个句柄 类型为HWND
//利用CWindowDC 提供的函数绘图 也不用显式调用GetDC,ReleaseDC函数
有关这几个类的成员函数和相关说明可以去看看MSDN
下面是几种图形绘制工具的应用
创建画笔,画刷(普通颜色画刷 和 位图画刷 , 透明画刷):
假设我们定义了类型为CPoint的2个点 并进行了初始化
//画笔
CPen pen(PS_DOT,1,RGB(255,0,0));//建立了红色的点线画笔
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen);//将创建的画笔选入设备描述表 并保存原来的画笔
dc.MoveTo(point1);//移动初始点到point1
dc.LineTo(point2);//画条从Point1到point2的点
dc.SelectObject(pOldPen);//还原画笔
//普通颜色画刷
CBrush brush(RGB(255,0,0));
dc.FillRect(CRect(point1,point2),&brush);
//位图画刷
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush bmpbush1(&bitmap);
dc.FillRect(CRect(point1,point2),&bmpbrush);
//透明画刷
CBrush *pNullBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=dc.SelectOBject(pNullBrush);
dc.Rectangle(CRect(point1,point2));
dc.SelectObject(pOldBrush);
如果我们是在View类的OnDraw函数中作图 我们大可直接使用函数传进来的CDC参数进行作图
在其他函数里面 我们可以使用一下方法作图:
1.利用全局函数
HDC hdc; //定义一个设备描述表的句柄(DC是设备描述表 而HDC这是DC的句柄 H:handle)
hdc=::GetDC(m_hWnd);//获得当前窗口的DC
////这里执行绘图操作 利用全局函数
::ReleaseDC(m_hWnd,hdc);
这里需要注意的是:机会在每个MFC的窗口类中(按钮,编辑框等也是一个窗口) 都有一个HWND类型数据成员m_hWnd,
又来表示当前窗口句柄。我们经常会利用到这个句柄。
GetDC() ReleaseDC()的使用要配对 如果只使用了前者 而不使用后者 会造成内存泄露
2.CDC绘图
CDC是MFC 中DC的一个类
CDC *pDC=GetDC();
//这里绘图 利用CDC提供的绘图函数
ReleaseDC(pdc);
3.利用CClientDC绘图
CClientDC是CDC的一个子类 它在自己的内部封装了GetDC,ReleaseDC函数 所以不用我们显式去调用者2个函数进行构建和释放
CClientDC ccd(this);
//直接绘图 利用CClientDC提供的绘图函数
4.利用CWindow绘图
CWindowDC dc(GetDesktopWindow());//GetDesktopWindow返回一个桌面窗口的一个句柄 类型为HWND
//利用CWindowDC 提供的函数绘图 也不用显式调用GetDC,ReleaseDC函数
有关这几个类的成员函数和相关说明可以去看看MSDN
下面是几种图形绘制工具的应用
创建画笔,画刷(普通颜色画刷 和 位图画刷 , 透明画刷):
假设我们定义了类型为CPoint的2个点 并进行了初始化
//画笔
CPen pen(PS_DOT,1,RGB(255,0,0));//建立了红色的点线画笔
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen);//将创建的画笔选入设备描述表 并保存原来的画笔
dc.MoveTo(point1);//移动初始点到point1
dc.LineTo(point2);//画条从Point1到point2的点
dc.SelectObject(pOldPen);//还原画笔
//普通颜色画刷
CBrush brush(RGB(255,0,0));
dc.FillRect(CRect(point1,point2),&brush);
//位图画刷
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush bmpbush1(&bitmap);
dc.FillRect(CRect(point1,point2),&bmpbrush);
//透明画刷
CBrush *pNullBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=dc.SelectOBject(pNullBrush);
dc.Rectangle(CRect(point1,point2));
dc.SelectObject(pOldBrush);
相关文章推荐
- 利用Microsoft VC++6.0 的MFC 的绘图工具实现简单图形的绘制
- MFC绘图总结-DIB图形绘制
- MFC中绘图的几种方式
- MFC中简单绘图几种方式
- MFC基本图形的绘制(三)在SDI中实现绘图操作
- VS2010 MFC使用TeeChart绘图控件之二:绘制图形(折线图,柱状图)
- MFC实现播放视频的几种方式
- MFC简单自学图形绘制2
- 绘图的几种方式
- 基于MFC串口编程和曲线图绘制(visual studio2008,Teechart绘图控件)的程序总结
- Quartz2D绘图<三>绘制图形
- HTML5之Canvas绘图——使用Canvas绘制图形的基本教程
- MOOC清华《VC++面向对象与可视化程序设计》第2章:Windows绘图-例(1)静态图形的绘制
- MFC图形绘制——绘制直尺和坐标系
- MFC绘制动态曲线,用双缓冲绘图技术防闪烁
- MFC基本图形的绘制(一)设备环境类CDC、画笔和画刷
- flash 绘图API:绘制秀曲线图形
- VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)
- VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图,柱状图)
- VC++绘制图形的几种方法