您的位置:首页 > 其它

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);

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc 图形 null 工具