2017.5.12MFC画线
来源:互联网 发布:印度最新人口数据 编辑:程序博客网 时间:2024/05/21 15:38
之前的学习都是对现有MFC程序的了解,对比之前窗口创建过程,在MFC中判断每一步的具体流程,现在有了比较清晰的认识,但具体的细节还要在之后的学习中不断完善。
现在知道了MFC创建后就有许多的代码,这些代码为我们的窗口创建提供了许多便利,我们不需要考虑太多关于窗口框架的问题。那么,我们如何在现有的MFC结构下编写自己的程序呢,接下来我们就学习一下如何在窗口中画线。
我们要实现的效果是,按下鼠标左键并拖动鼠标到另一点,屏幕显示两点之间的线段。
首先在VC6.0菜单中点击查看——建立类向导,即可增加响应函数,需要在CDrawView类下增加响应函数LButtonDown,并选择编辑就跳转到编译环境。
注:当增加一个消息响应函数时,实际上在3个地方进行了修改。第一个是在头文件中加入消息响应函数原型的声明,第二个是在源文件(.cpp)中加入消息响应函数的一个宏,通过这个宏把我们的消息和消息响应函数关联起来了。第三个是在源文件中增加了消息响应函数的定义(实现部分)。
然后在CDrawView类中创建一个私有成员变量,在结构体中进行初始化
private: CPoint m_ptOrigin;
CDrawView::CDrawView(){ // TODO: add construction code here m_ptOrigin = 0;}
在OnLButtonDown中保存当前鼠标左键按下的点
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_ptOrigin = point; CView::OnLButtonDown(nFlags, point);}
接下来要确定线段的终点,需要另一个按键松开的响应,同前一个步骤类似
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CView::OnLButtonUp(nFlags, point);}
接下来就利用4种方法创建了画线命令,同时介绍了线型和颜色的选择。
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default /****************wjl*********************** 方法一: 这个是用平台SDK 来完成的划线功能 用的API函数(全局函数)来完成的 ********************************* 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); ******************wjl*********************/ /****************wjl*********************** 方法二: 因为MFC具有高度的封装性,MFC中所有和窗口 相关的操作都封装到CWnd类中了, 所有和作图相关的操作都封装到CDC类中了。 接下来利用MFC里面的CDC类来进行划线的操作 CDC *pDC=GetDC(); // 这里的GetDC是CWnd类中的函数 pDC->MoveTo(m_ptOrigin); pDC->LineTo(point); ReleaseDC(pDC); ***************wjl************************/ /****************wjl*********************** 方法三: 介绍另外一个类 CClientDC,它在创建对象的时候 自动调用了GetDC,并且在结束的时候自动释放DC// CClientDC dc(this); // 这个是和View窗口相关的操作, CClientDC dc(GetParent()); //这个时候框架窗口相关的操作 dc.MoveTo(m_ptOrigin); dc.LineTo(point); ***************wjl************************/ /****************wjl*********************** 方法四: 另外一个类CWindowDC,和CClientDC类似,他们都自动 调用GetDC,并且在结束的时候自动释放DC。不同的是 CWindowDC可以访问整个窗口区域,包括客户区和非客户区 //CWindowDC dc(this); //CWindowDC dc(GetParent()); CWindowDC dc(GetDesktopWindow()); // 划线到整个屏幕 dc.MoveTo(m_ptOrigin); dc.LineTo(point); ***************wjl************************/ /****************wjl*********************** <*如何改变线宽和颜色*> 1. 首先要创建画笔,利用MFC提供的CPen类 CPen pen(参数一,参数二,参数三); 第一个参数指画笔的类型 实线PS_SOLID、虚线PS_DASH、点线PS_DOT 第二个参数指的是画笔的宽度 第三个参数是笔的颜色RGB(0-255) 2. 当你创建完画笔之后并不会生效,你需要将这个笔 选择到设备描述表DC当中,这样当你调用DC的时候才能 使用你定义好的画笔。 利用SelectObject()把当前的画笔选择到DC中,同时保存先前的 画笔(SelectObject的返回值就是先前的画笔类型) 3.注意:虚线PS_DASH和点线PS_DOT 只有在线宽小于等于1的时候才会效果 CPen pen(PS_DOT,1,RGB(0,0,255)); CClientDC dc(this); CPen *pOldPen = dc.SelectObject(&pen); // 这里保存了先前画笔类型的指针 dc.MoveTo(m_ptOrigin); dc.LineTo(point); dc.SelectObject(pOldPen); // 将之前的画笔类型还原 ***************wjl************************/ CView::OnLButtonUp(nFlags, point);}
0 2
- 2017.5.12MFC画线
- MFC画线
- MFC画线
- MFC 画线
- [MFC]画线
- MFC 画线
- MFC画线
- vs2008 MFC 画线
- MFC 鼠标实时画线
- MFC画线小结
- MFC 鼠标画线总结
- MFC之画线方法
- MFC鼠标响应、鼠标画线
- MFC在窗体上画线
- MFC中实现用DC画线
- VC.NET + MFC 使用 GDI+ DrawLines 画线
- MFC 画线的几种方式
- 画线
- XML初涉
- windows客户端开发--实现一个多线程定时器
- Android 开发 Tip 12 -- 各种Drawable
- 小程序本地测试没有问题,苹果正常,安卓无法发送请求?
- 在Ubuntu 14.04 安装mysql
- 2017.5.12MFC画线
- 主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解
- 【Caffe】【场景分类】Places365安装、docker运行,以及调用本地caffe运行(Ubuntu14.04)
- HTTP状态码(HTTP Status Code),常见的error 404, error 504等的意思(转)
- TP5验证规则
- jfinal+H5的websocket 实现同一账户在不同地点不同电脑只能登陆一个(互相踢下线)
- 使用MDC为Logback slf4 日志记录线程ID,区分每次执行的会话日志
- classloader 原理分析
- 免费视频播放器videojs中文教程