VC怎么样利用MFC利用SDK画线例子
来源:互联网 发布:人工智能机器人图片 编辑:程序博客网 时间:2024/05/16 07:09
1、利用SDK全局函数实现画线功能
利用Platfirn SDK函数实现画线功能的代码:
- void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
- {
- // 首先获得窗口的设备描述表
- 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);
- CView::OnLButtonUp(nFlags, point);
- }
为了进行绘图操作,必须获得一个设备描述表(DC)。因此,我们这里首先定义了一个HDC类型的变量:hdc,接着调用全局函数GetDC获得当前窗口的设备描述表。CWnd类有一个成员变量(m_hWnd)用于保存窗口句柄,而CDrawView类派生于CWnd类,因此该类也有这样的一个成员变量,这里的GetDC函数可以直接把这个成员变量作为参数来使用。
2、利用MFC的CDC类实现画线功能
MFC为我们提供一个设备描述表的封装类CDC,该类封装了所有与绘图相关的操作。该类提供一个数据成员m_hDC,用来保存与CDC类相关的DC句柄。其道理与CWnd类提供m_hWnd成员变量保存与窗口相关的窗口句柄是一样的。如下例就是利用MFC的CDC类实现画线功能的代码。
- void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
- {
- /* // 首先获得窗口的设备描述表
- 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);
- */
- CDC *pDC = GetDC();
- pDC->MoveTo(m_ptOrigin);
- pDC->LineTo(point);
- ReleaseDC(pDC);
- CView::OnLButtonUp(nFlags, point);
- }
从上例中的代码可以看出,利用MFC类实现画线功能时,首先需要定义一个CDC类型的指针,并利用CWnd类的成员函数GetDC获得当前窗口的设备描述表对象的指针;接着利用CDC类的成员函数MoveTo和LineTo完成画线操作;最后调用CWnd类的成员函数ReleaseDC释放设备描述表资源。
3、利用MFC的CClientDC类实现画线功能http://www.125pc.com/dnrm/
这里将利用MFC提供的CClientDC类来实现画线功能。这个类派生于CDC类,并且在构造时调用GetDC函数,在析构时调用ReleaseDC函数。也就是说,当一个CClientDC对象在构造时,它在内部会调用GetDC函数,获取一个设备描述表对象;在这个CClientDC对象析构时,会自动释放这个设备描述表资源。这样的话,程序中如果使用CClientDC类型定义DC对象,就不需要显式地调用GetDC函数和ReleaseDC函数了。只需要定义一个CClientDC对象,然后就可以利用该对象提供的函数进行绘图操作了。当该对象的生命周期结束时,会自动释放其所占用的设备资源。这就是CClientDC对象的好处。下例就是利用CClientDC类实现画线功能的代码。
- void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
- {
- CClientDC dc(this);
- dc.MoveTo(m_ptOrigin);
- dc.LineTo(point);
- CView::OnLButtonUp(nFlags, point);
- }
在这个例子中,我们需要注意视类窗口和框架窗口的位置关系。整个程序窗口就是框架窗口,而工具栏以下白色区域部分才是视类窗口。视类窗口只有客户区(即视类窗口本身),而框架窗口既有客户区(即菜单栏以下部分),还有非客户区(就是程序运行界面中的标题栏和菜单栏)。而绘图操作一般都是在窗口的客户区进行的。
4、利用MFC的CWindowDC类实现画线功能
这里再介绍一个MFC类:CWindowDC,这个类也派生于CDC类,并且在析构时调用GetWindowDC函数获得相应的设备描述表对象,在析构时调用ReleaseDC函数释放该设备描述表对象所占用的资源。也就是说,当我们利用CWindowDC对象进行绘图时,也不需要显式地调用GetDC和ReleaseDC函数。该对象会自动获取和释放设备描述表资源。
使用CWindowDC对象的好处就是该对象可以访问整个窗口区域,包括框架窗口的非客户区和客户区。该对象的构造与CClientDC对象相同,如果要构造一个与视类窗口相关的设备描述表,则可以利用视类对象的指针来构造这个CWindowDC对象。如下例,就是利用CWindowDC对象实现画线功能的代码。
- void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
- {
- CWindowDC dc(this);
- dc.MoveTo(m_ptOrigin);
- dc.LineTo(point);
- CView::OnLButtonUp(nFlags, point);
- }
- VC怎么样利用MFC利用SDK画线例子
- 利用SDK与MFC实现画线功能的五种方法
- 利用SDK全局函数实现画线功能详解
- 利用MFC的CClientDC类实现画线功能
- 利用MFC 的CDC 类实现画线功能
- 利用键盘画线
- 利用 wz_jsgraphics.js 画线
- 利用VC编写MFC OpenGL向导
- VC.NET + MFC 使用 GDI+ DrawLines 画线
- MFC中利用MSComm控件实现串口通信的例子
- VC++、Win32 SDK、MFC
- 利用VC++6.0实现JNI的最简单的例子.
- 利用VC++6.0实现JNI的最简单的例子
- 利用VC++6.0实现JNI的最简单的例子.
- 利用VC++做的JNI的helloworld例子
- VC ++ 利用系统函数 QueueUserWorkItem 实现线程例子
- VC ++ 利用系统函数 QueueUserWorkItem 实现线程例子
- VC中利用MFC设计绘图程序初步
- SATA接口 IDE接口 双硬盘怎么样进行安装指导
- myeclipse9中导入的jquery文件报错(出现红叉叉,提示语法错误)
- 关于 -- IPhone 的音频队列服务
- Ubuntu10.10上成功安装Mesa-8.0.3
- stack
- VC怎么样利用MFC利用SDK画线例子
- AC 自动机
- 数据结构与算法复习(15)—— 博弈论
- Collaborative Filtering——电子商务商品推荐算法科普
- 数据结构与算法复习(7)—— 并查集
- 新浪微博接口,获取用户粉丝列表
- poj 3624 Charm Bracelet
- VS2008与MySQL数据库操怎么样链接代码实例
- 数据结构与算法复习(10)—— 后缀数组与字符串问题