MFC学习笔记.day02续-CDC类,绘图区域,CPen画笔,画刷 CBrush,DC设备描述表
2015-07-23 11:26
483 查看
CDC类概述链接
一般我们在使用完CDC对象后要记得删除它,否则会有内存泄露。很多情况下我们可以调用CWnd::GetDC()函数来获取设备上下文指针,即CDC指针,这个时候记得用完后调用CWnd::ReleaseDC()函数释放设备上下文。
在MFC中所有跟作图相关的函数我们都封装到一个类了就是CDC类。
我们利用这种方法来进行划线:
CClientDC是从CDC中派生出来的,它在构造的时候它会调用getdc,来获取一个dc的句柄,它在析构的时候会调用realeasedc,来释放dc,所以说我们在使用的时候不要显示的调用它们了。
我们利用这个函数来划线:
CPen
第一步:创建画笔
第二步:创建DC
第三步:将笔选到设备描述表当中
第四步:进行绘图、划线
第五步:将先前的画笔选回到设备描述表表
【注意】但我们想要创建阴影线时,必须注意将线宽设置为小于1;
第一步:画刷的创建 CBrush brush(RGB(255,0,0));
第二步:dc的创建 CClientDC dc(this);
第三步:矩形区域的填充 dc.FillRect(CRect(m_ptorigin,point),&brush);
用位图画刷填充矩形区域:
第一步:创建一幅位图 在resource中可以选着新建或是导入
第二步:定义一幅位图的对象 CBitmap bitmap;
第三步:加载一幅位图 LiadBitmap(位图的ID号);
第四步:dc的创建 CClientDC dc(this);
第五步:矩形区域的填充 dc.FillRect(CRect(m_ptorigin,point),&brush);
有的书中,将DC翻译为设备描述表(《Windows 程序设计第五版》作者Charles Petzold),也有的书将DC翻译为设备上下文。
我们可以这么来理解MFC中画图的概念,要画图我们必须要有画图的环境,比如要画布、画笔、画刷……
我们把这个画图的环境功称为DC。
在画图的环境下,一切都是画出来的,所以你在画图之前必须把DC准备好,当然写字也是这样子的。
我们在画画的环境中会用到哪些东西————这些东西我们称为GDI对象
一般我们在使用完CDC对象后要记得删除它,否则会有内存泄露。很多情况下我们可以调用CWnd::GetDC()函数来获取设备上下文指针,即CDC指针,这个时候记得用完后调用CWnd::ReleaseDC()函数释放设备上下文。
在MFC中所有跟作图相关的函数我们都封装到一个类了就是CDC类。
我们利用这种方法来进行划线:
CDC *pDC=GetDC();//这里我们用CWND的成员函数getdc pDC->MoveTo(m_ptorigin); pDC->LineTo(point); RealeaseDC(pDC);//这里我么也是使用cwd的成员函数
CClientDC是从CDC中派生出来的,它在构造的时候它会调用getdc,来获取一个dc的句柄,它在析构的时候会调用realeasedc,来释放dc,所以说我们在使用的时候不要显示的调用它们了。
我们利用这个函数来划线:
绘图区域
//只在客户区域栏划线 CClientDC dc(this); dc.MoveTo(m_ptorigin); dc.LineTo(point);
//在客户区域和工具栏上划线 CClientDC dc(GetParent()); dc.MoveTo(m_ptorigin); dc.LineTo(point);
//在整个屏幕上划线 CWindowDC dc(GetDeskTopWindow()); dc.MoveTo(m_ptorigin); dc.LineTo(point);
CPen
CPen( ); CPen( int nPenStyle,//Specifies the pen style. int nWidth,//Specifies the width of the pen. COLORREF crColor //Contains an RGB color for the pen. ); CPen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush,//Points to a LOGBRUSH structure. int nStyleCount = 0, const DWORD* lpStyle = NULL );
第一步:创建画笔
CPen pen(PS_SOLID,1,RGB(255,0,0));
第二步:创建DC
CClientDC dc(this);
第三步:将笔选到设备描述表当中
CPen *pOldPen=dc.SelectObject(&pen); //会返回一个旧的画笔,保存起来
第四步:进行绘图、划线
dc.MoveTo(m_ptorigin) dc.LineTo(point);
第五步:将先前的画笔选回到设备描述表表
dc.SelectObject(pOldPen);
【注意】但我们想要创建阴影线时,必须注意将线宽设置为小于1;
画刷 CBrush
用画刷填充矩形区域:第一步:画刷的创建 CBrush brush(RGB(255,0,0));
第二步:dc的创建 CClientDC dc(this);
第三步:矩形区域的填充 dc.FillRect(CRect(m_ptorigin,point),&brush);
用位图画刷填充矩形区域:
第一步:创建一幅位图 在resource中可以选着新建或是导入
第二步:定义一幅位图的对象 CBitmap bitmap;
第三步:加载一幅位图 LiadBitmap(位图的ID号);
第四步:dc的创建 CClientDC dc(this);
第五步:矩形区域的填充 dc.FillRect(CRect(m_ptorigin,point),&brush);
DC(Device context)
在GDI中,DC(Device context)是一个非常重要的概念。有的书中,将DC翻译为设备描述表(《Windows 程序设计第五版》作者Charles Petzold),也有的书将DC翻译为设备上下文。
我们可以这么来理解MFC中画图的概念,要画图我们必须要有画图的环境,比如要画布、画笔、画刷……
我们把这个画图的环境功称为DC。
在画图的环境下,一切都是画出来的,所以你在画图之前必须把DC准备好,当然写字也是这样子的。
我们在画画的环境中会用到哪些东西————这些东西我们称为GDI对象
~画布,画笔,调色板,字体,画刷,位图
相关文章推荐
- Android build系统,读后对之前的一些工作有了进一步的体会
- UILabel文字滚动
- (int&)a与*(int*)&a
- java 非阻塞通信
- Android应用开发相关下载资源(2015/05/06更新)
- AtomicInteger分析--自实现无锁并发
- APM之AP_HAL
- iOS开发XCODE5 SVN配置 使用办法
- Nginx - Windows下Nginx基本安装和配置
- Unity笔记 UGUI RichText 文字表情图片
- 使用jquery实现仿百度自动补全特效
- 如何修改 UINavigationController、UINavigationBar 中 navigationItem 左侧 “返回” 按钮的名称
- UGUI之CanvasScaler的正确用法
- 任正非“2012实验室”讲话全文
- 制作手电筒
- [算法]最优矩阵链乘(动态规划 记忆化搜索)
- MySQL日期数据类型、时间类型使用总结
- APP上线前,如何做运营推广工作?
- spring MVC配置说明及Controller注解实例
- 在 UIViewController 中手动增加 TableView 出现 Type 'SomeViewController' does not confirm to protocol 'UITableViewDataSource' 问题的解决办法