使用MFC画线(初学)
使用MFC在单文档上划线(初学)
MFC的画线
在Visual Studio 2019中新建MFC应用,选单个文档,去掉所有高级功能后创建
直接执行,则有
1.鼠标按下响应
(1)在类向导中
(2)代码中,在自增代码里添加语句
(3)执行代码
或
则有
2.画线
表示点(屏幕坐标点)
在MFC中有一个类表示在(CPoint),CPoint类中有x和y坐标,这两个值就是表示屏幕上的坐标,x和y坐标与电脑屏幕分辨率有关,当鼠标点击时,windows会自动捕捉坐标并放到CPoint类里,CPoint类操作系统已经帮我们做好了,我们只需要拿到这个值给他去接下来的操作就行了
(如何看类:按住Ctrl用鼠标点击它,就能进入mfc所定义的位置)
如下类所定义的
如何画线
两点之间有一条线,将起点保存下来,在终点时我们就可以做一些操作了。
如何捕捉两点鼠标按下:起点;鼠标抬起:终点
如何表示:CPoint
如何保存起点
在类里添加成员变量(可以手动鼠标添加,推荐使用类向导)。还是在view里添加成员变量,然后选添加“自定义变量”,变量名取有意义的。
如果上图访问项选的是受保护则有如下所示
然后在down上用自定义成员保存第一个点(起点)
而画画需要在平板或平纸上画,在Windows设备里也需要画布
设备上下文(Device Content,DC)
(屏幕,打印机,抽象的。
只要得到这个上下文就可以画点画线画抽象的,与底下是什么设备没有关系,这是操作系统提供给我们的功能)
画布
HDC hdc=::GetDC(m_Hwnd)
CDC cdc=getDC()
CClientDC dc(this)
一般“获取设备上下文”和“释放设备上下文”是成对使用的
就是说每次画线、画点之前先获得这个设备上下文,用完之后一定要记得释放,养成一个比较好的习惯。如果不释放有可能会造成资源被占用、内存泄漏什么的。
MoveTo():移动到什么位置,起点已经保存在括号里
紧接着这个函数
LineTo():画的线
执行后,效果是:当你的鼠标左键按下时开始滑动一直不放,直到鼠标抬起,从鼠标按下的点到抬起的点会有一条默认的黑色细线。效果如下:
总结:
这是主要讲基于单文档类型的应用程序,在屏幕上如何绘制一条线,是借助于设备上下文(设备上下文(Device Content,DC) ),还有事件的组合(鼠标的按下和抬起),时间逻辑放在那个里面。
还是比较简单的,只是和vc比起来操作繁多,总会忘点什么,或者就不操作也会忘。