以下代码我是在View类中实现的:
/** 利用平台SDK实现画线功能
// 首先获得窗口的设备描述表
HDC hdc;
hdc = ::GetDC( m_hWnd ); //调用的是平台SDK的成员函数
// 移动到线条的起点
MoveToEx( hdc, m_ptOrigin.x, m_ptOrigin.y, NULL ); // 第四个参数是一个指向Point结构体的指针,用于保存移动前鼠标的位置坐标,这里不需要这个坐标,所以设置为NULL
LineTo( hdc, point.x, point.y );
::ReleaseDC( m_hWnd, hdc );
CView::OnLButtonUp(nFlags, point);
*/ /** CDC 类,利用MFC封装类实现画线功能
CDC* pDC = GetDC(); // 调用的是CWnd类的成员函数,View类也是从CWnd类继承的
pDC->MoveTo( m_ptOrigin );
pDC->LineTo( point );
ReleaseDC( pDC );
*/ /** 利用CDC 类的派生类 CClientDC 实现画线功能, 他在构造函数中调用GetDC,在析构时调用ReleaseDC,因此不需要显示调用
//CClientDC dc( this );
CClientDC dc( GetParent() );
dc.MoveTo( m_ptOrigin );
dc.LineTo( point );
*/ /**CWindowDC 也派生于CDC类
//CWindowDC dc( this ); // 在客户区绘图
//CWindowDC dc( GetParent() ); // 可以在菜单栏和工具栏上绘图
CWindowDC dc( GetDesktopWindow());
dc.MoveTo( m_ptOrigin );
dc.LineTo( point );
*/ /** 画笔的使用
//CPen pen( PS_SOLID, 2, RGB(255, 0, 0) );
//CPen pen( PS_DASH, 1, RGB(255, 0, 0) ); //线宽必须<=1才生效
CPen pen( PS_DOT, 1, RGB(255, 0, 0) );
CClientDC dc( this );
CPen* pOldPen = dc.SelectObject( &pen );
dc.MoveTo( m_ptOrigin );
dc.LineTo( point );
dc.SelectObject( pOldPen );
*/ /** 颜色画刷的使用
CBrush brush( RGB(255, 0, 0) );
CClientDC dc( this );
dc.FillRect( CRect( m_ptOrigin, point), &brush );
*/ /** 位图画刷的使用
CBitmap bitmap;
bitmap.LoadBitmapW( IDB_BITMAP1 );
CBrush brush( &bitmap );
CClientDC dc( this );
dc.FillRect( CRect( m_ptOrigin, point ), &brush );
*/ /** 默认是白色画刷,会覆盖掉先前区域内图行
CClientDC dc( this );
dc.Rectangle( CRect( m_ptOrigin, point ) ); // DC 默认是白色画刷,前边画的图像会把后边的覆盖掉,所以要想办法用透明画刷
*/ /** 使用透明画刷
CClientDC dc( this );
// 创建一个空画刷,FromHandle方法可以将画刷句柄转换成画刷对象
// GetStockObject方法返回的是一个HGDIOBJECT句柄,所以要将其强制类型转化成HBRUSH类型
CBrush* pBrush = CBrush::FromHandle( (HBRUSH)GetStockObject( NULL_BRUSH));
CBrush* pOldBrush = dc.SelectObject( pBrush );
dc.Rectangle( CRect( m_ptOrigin, point ) );
dc.SelectObject( pOldBrush );
*/

MFC中设备描述表dc的使用的更多相关文章

  1. MFC中的各种DC区别

    转载自:xntop的<区别MFC中的CClientDC.CWindowDC.CPaintDC.CMetaFileDC> CClientDC及其子类 1. CClientDC类只能在客户区绘 ...

  2. MFC中属性表单和向导对话框的使用

    每次在使用MFC创建一个框架时,需要一步步选择自己的程序的外观,基本功能等选项,最后MFC会生成一个基本的程序框架,这个就是向导对话框:而属性表单则是另外一种对话框,表单上有多个属性页,每点击某一页, ...

  3. VC++ MFC中如何将应用程序的配置信息保存到注册表中(二)

    在上一篇中介绍了几个写入注册表数据和读取注册表数据的接口,并介绍了使用方法. 这一片教你如何使得你的应用程序在下次打开时保持上一次关闭前的状态. 在上一篇添加的代码的基础上,要添加WM_CLOSE消息 ...

  4. VS2010 MFC中制作Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图)

    VS2010 MFC中制作Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图) 1. 在资源窗口里新建一个FormView的Dialog,修改ID为 ...

  5. MFC中的一些视图

    本章主要介绍MFC中主要的视图类,这些继承自Cview类. 继承关系如上图所示. 滚动视图 CscrollView给Cview添加了基本的滚动功能,它包含WM_VSCROLL和WM_HSCROLL消息 ...

  6. OpenGL在MFC中的使用总结(一)——基本框架

    项目中要画3D显示的模型,于是要用到OpenGL,加上是在MFC中,并且是在MFC中的ActiveX中使用.再并且鉴于他们程序主框架的设定.常规的方法还不一定能实现.所以还是查过不少资料,在此一一总结 ...

  7. MFC中对话框类(Dialog)的应用

    转载http://hi.baidu.com/jackywdx/item/feee8041d2c2e12310ee1e85 Windows应用程序通常是通过对话框接收用户输入.向用户输出信息,本节介绍应 ...

  8. 怎样在VS2013/MFC中使用TeeChart绘图控件

    TeeChart作为一款强大好用的绘图控件,通过它可以绘制出各式各样的图表,包括2D的,还有3D的,绘制的图表美观实用,这里主要讲述如何在VS2013/MFC中使用TeeChart控件,顺便说一下在V ...

  9. MFC中消息响应机制

    由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击.鼠标移动等操作都只能由视类窗口捕获.一个MFC消息响应函数在程序中有三处相关信息:函数原型.函数实现和以及用来关联消息和消息响应函数的 ...

随机推荐

  1. QThreadPool线程池的使用,线程与Widget通过信号与槽的方式通信。

    因为QRunnable类并非继承自QObject,不能使用信号和槽,为了能够使用信号与槽和Widget通信,需要对QRunnable进行封装. 定义一个类QMyRunnable,该类首先继承自QObj ...

  2. Android WebView加载Html右边空白问题的解决方案

    用WebView显示Html时,右边会出现一条空白区,如下图所示: 最开始的时候,认为是网页本身的空白. 后来发现网页本身无问题,且这个空白区是跟Scroll Bar 的位置和粗细比较相符,于是去控制 ...

  3. DM6467开发领航-开发坏境安装

  4. [Winform]WebKit.Net使用

    摘要 在项目中使用了cefsharp,最后发现在触屏电脑上面,如果长按文本内容,会经常性的崩溃,发现是cefsharp的问题,最后也等不及了.然后就换了webkit.net这个开源的浏览器内核. 关于 ...

  5. Windows Application Data拒绝访问打开方法?

    在Windows7操作系统,打开 Application Data等文件夹时,弹出位置不可用的警告窗口,提示拒绝访问.下面提供简单的解决方法,希望有用. 工具/原料 计算机. Windows7操作系统 ...

  6. 在ASP.NET Web API中使用OData的单例模式

    从OData v4开始增加了对单例模式的支持,我们不用每次根据主键等来获取某个EDM,就像在C#中使用单例模式一样.实现方式大致需要两步: 1.在需要实现单例模式的导航属性上加上[Singleton] ...

  7. 标记 {x:Null},d:DesignWidth,d:DesignHeight

    {x:Null}:用于设置某属性值为Null,比如<Rectangle Fill="{x:Null}" />,其实就相当于<Rectangle />,个人感 ...

  8. 利用npm 安装删除模块

    转自 涵一原文 利用npm 安装删除模块 1. npm安装模块 [npm install xxx]利用 npm 安装xxx模块到当前命令行所在目录:[npm install -g xxx]利用npm安 ...

  9. C#编程(二十五)----------接口

    接口 如果一个类派生自一个接口,声明这个类就会实现某些函数.并不是所有的面向对象的语言都支持接口. 例如,有一个接口:IDispoable,包含一个方法Dispose(),该方法又类实现,用于清理代码 ...

  10. C#编程(二十二)----------继承的类型

    继承的类型 在面向对象的编程中,有两种截然不同的集成类型:实现继承和接口继承 实现继承:表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数.在实现继承中,派生类型采用基类型的每个函数的实 ...