绘制线条
1、利用SDK全局函数实现画线功能
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
注:为了进行画图操作,必须获得一个设备描述表DC;在完成绘图操作后,一定要释放设备描述表资源
2、利用MFC的CDC类实现画线功能
CDC* pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
CView::OnLButtonUp(nFlags, point);
注:MFC提供了一个设备描述表的封装类CDC,该类封装了所有与绘图相关的操作;并提供了一个数据成员m_hDC,
用来保存与CDC类相关的DC句柄
3、利用MFC的CClientDC类实现画线功能
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
注:MFC提供了CClientDC类来实现绘图操作,该类继承于CDC类;在构造时调用GetDC函数,在析构时调用Release
函数;在构造CClientDC对象时,需要一个CWnd类型的指针参数,传递this表示视类窗口,传递GetParent()表示
框架窗口
4、利用MFC的CWindowDC类实现画线功能
CWindowDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
注:CWindowDC类与CClient类基本相同,区别在于该类可以访问整个窗口区域,包括框架窗口的客户区和非客户区
5、在桌面窗口中画线
CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
注:CWnd::GetDesktopWindow成员函数可以获得Windows桌面窗口的句柄,从而获得一个与桌面窗口相关的设备描
述表,就可以在桌面窗口中绘图
6、绘制彩色线条
(1)设备描述表中有一个默认的黑色画笔
(2)MFC提供了CPen类用于创建画笔对象,该类封装了与画笔相关的操作
(3)当构建一个GDI对象后,该对象并不会立即生效,必须选入设备描述表,它才会在以后的绘制操作中生效
(4)一般情况下,在完成绘图操作之后,都要利用SelectObject函数把先前的GDI对象选入设备描述表,以便使其
恢复到先前的状态
(5)画笔的宽度要小于等于1时,虚线线型才有效
(6)实现代码
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);
使用画刷绘图
1、简单画刷
(1)MFC提供了CBrush类,用于创建画刷对象,从而可以填充一块区域
(2)设备描述表对象的成员函数FillRect,用于利用指定的画刷填充一块指定的矩形区域
(3)实现代码
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
2、位图画刷
(1)CBrush类的CBrush(CBitmap* pBitmap)构造函数可以创建一个位图画刷对象
(2)CBitmap类是位图类,构建该类对象时,除了要调用构造函数,还要调用LoadBitmap初始化函数
(3)实现代码
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
3、透明画刷
(1)设备描述表中有一个默认的白色画刷
(2)GetStockObject函数用于获取一个白色或黑色的画刷句柄
(3)静态成员(静态成员变量和静态成员函数)属于类本身,在类加载的时候,即为它们分配了空间,所以可以通过
类名::变量名/函数名来访问;而实例成员属于对象的数据和方法,也就是应该首先产生类的对象,然后通过类的对
象去引用
(4)在静态成员函数中不能调用非静态成员,而只能访问静态成员变量
(5)无论采用什么样的操作,程序代码都是在内存中运行的,只有在内存中占有了一席之地,我们才能够访问它。如
果一个成员函数或成员变量还未在内存中产生,结果是无法访问它的
(6)实现代码
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);
四、绘制连续线条
1、鼠标移动消息WM_MOUSEMOVE,可用来绘制连续线条
2、实现代码
CClientDC dc(this);
if(m_bDraw)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOrigin=point;
}
五、绘制扇形效果的线条
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen* pOldPen=dc.SelectObject(&pen);
if(m_bDraw)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.LineTo(m_ptOld);
m_ptOld=point;
}
dc.SelectObject(pOldPen);
分享到:
相关推荐
MFC笔记 MFC笔记 MFC笔记 MFC笔记 MFC笔记 MFC笔记
MFC学习笔记
MFC学习笔记(onenote格式),一个朋友参加MFC培训,其教师在讲课过程中做的学习日记。图文并茂,是初学者很好的学习资料。
C++、MFC学习笔记!
MFC学习笔记.docx 自己的学习笔记。
这是一个关于 MFC菜单操作学习笔记 的资源,有需要的朋友下载阅读。
这是MFC的学习笔记,很好的。比较容易入门。
深入浅出MFC读书笔记3 深入浅出MFC 读书笔记
价值20000元达内win32加MFC学习笔记.
本人自学MFC期间的学习笔记,分类详细,适合初学者
Visual_C++MFC学习笔记,在你一边听视频一遍查找笔记中的内容,学习C++ MFC会更容易些。
本人从零开始学C++/MFC的时候,积累和整理的学习笔记,其中有大部分常见问题和处理办法,看过很过帖子,也查过很多资料,最终把他们记录下来。 Demo内容: ★ ::OnTimer OnTimer()函数用于实现定时控制功能,定时...
C++ MFC 学习笔记 对初学者有很大提高
达内MFC课程完整笔记
MFC学习笔记--案例--销售系统,txt文件存储,格式固定,文件内容增加、删除、修改等,简单控件的使用,文本框,下拉框,表格,界面切换等,缓存,方便以后复习
MFC 绘图 简单的MFC绘图程序 划线 画矩形但是 还不能保存
声明:所有代码和程序仅作为参考,各位可自由使用,出现一切后果自负。 博文地址:http://blog.csdn.net/shortcoder/article/details/16370697
7.16基于对话框编程对话框是一种特殊类型的窗口,绝大多数Windows程序都通过对话框与用户进行交互 2.1 创建基于对话框的 MFC 应用程序框架程序的创建
深入浅出MFC读书笔记2 深入浅出MFC 读书笔记