关于设备上下文DC和GDI的理解
来源:互联网 发布:无人机航拍测量软件 编辑:程序博客网 时间:2024/06/06 02:02
一、设备环境(Device Context)(设备上下文)
设备上下文DC是一个Windows数据结构,它包含了某个设备的绘制属性。通常,绘制调用都是借助于上下文对象,而这些设备上下文对象封装了用于画线、形状、文本等的Windows API。设备上下文是设备无关的,所以它既可以用于绘制屏幕,也可以用于绘制打印机甚至元文件。设备上下文在内存中创建,而内存经常受到扰动,所以它的地址是不固定的。因此,一个设备上下文句柄不是直接指向设备上下文对象,而是指向另外一个跟踪设备上下文地址的指针。
我个人认为设备上下文相当于画图过程中的画布(画纸),在VC中,这个画布可以是显示器,也可以使打印机,设备上下文决定了画布的属性,而且封装了在画布上画画的方法,比如画线,画点,等等,例如: pDc->LineTo(512,0); //从左下角到右上角的一条红色直线 。我们在VC中画图时,首先要得到这块画布才可以画画,所以要进行获取设备环境。
1、常见设备上下文及区别:CClientDC,CPaintDC,CWindowDC
CClientDC:(客户区设备上下文)用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC。只能在客户区绘制图形。
CPaintDC:只能在客户区绘制图形。(1)CPaintDC类是CDC类的一个派生类,该类一般用在响应WM_PAINT消息的函数OnPaint()中。(2)WM_PAINT消息是当窗口的某个区域需要重画时激发的窗口消息。当程序中的消息循环接到WM_PAINT消息时就自动调用消息处理函数OnPaint(),如果在OnPaint函数内定义了CPaintDC类的对象,通过这个类对象就可以使用CDC类的成员函数完成视图客户区中的图形绘制操作。(3)CPaintDC用于响应窗口重绘消息(WM_PAINT)时的绘图输出。CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。因此,在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。CPaintDC也只能用在WM_PAINT消息处理之中。
CWindowsDC:(1)可在非客户区绘制图形,而CClientDC,CPaintDC只能在窗口的客户区绘制图形。(2)坐标原点是在窗口的左上角,CClientDC,CPaintDC下坐标原点是在客户区的左上角。
下面介绍一下获得这块画布的方法,即获取设备上下文的方法:
1、通过OnDraw()函数获得CPaintDC:在OnDraw()函数中入口参数CDC *pDC,传入这即操作的设备上下文,这个上下文既是CPaintDC。他是通过OnPaint()构建,并传入OnDraw(),View类如果没有重载OnPaint(),则窗口刷新时自动调用MFC底层代码的OnPaint()函数,从而调用OnDraw()。我们就可以通过OnDraw()在客户区进行初始化的绘制。
2、通过CClientDC,CPaintDC,CWindowDC定义一个DC。
例如:CClientDC dc(this);创建一个dc,在当前对象的客户区。创建一个CWindowDC类的对象:CWindowDC dc(this);
3、通过HDC GetDC(HWND hWnd);hWnd:设备上下文环境被检索的窗口的句柄,如果该值为NULL,GetDC则检索整个屏幕的设备上下文环境,返回值是hdc,即一个DC描述符,入口参数是一个窗口类型的句柄。
例如: pWnd=GetDlgItem(IDC_STATIC_PIC); //IDC_STATIC_PIC是对话框图片空间的一个标识号
pWnd->SetWindowPos(NULL,0,0,512,120,SWP_NOZORDER|SWP_NOMOVE); //调整长宽为(512,120)
pDc=pWnd->GetDC();
二,GDI及GDI函数
GDI对象就是绘画时用的工具,比如画笔,画刷,字体,位图,调色板。如果绘图的时候,需要先把相应的GDI设备选入设备环境,就是为画图选个画笔,工具。
注意MFC中,GDI和CDC是两个独立的类
- 关于设备上下文DC和GDI的理解
- 四、设备上下文DC的编程方法
- DC设备上下文的举例描述
- 对Windows程序中设备上下文DC(device context)的理解
- 对Windows程序中设备上下文DC(device context)的理解
- 关于MFC中的DC、CDC、HDC、句柄、设备上下文
- 浅析设备上下文(DC)
- 浅析设备上下文(DC)
- DC?设备上下文?怎么翻译的。。。终于弄懂了。
- GDI和DC
- GDI+学习笔记5-设备环境DC的概念
- VC++ 设备上下文的理解
- 设备上下文(DC)与内存设备上下文中的位图与画刷属性的一些零碎
- 关于DC和SelectObject()函数的理解
- DC关于set_max_fanout的准确理解和说明
- 关于DC和SelectObject()函数的理解
- 关于DC和SelectObject()函数的理解
- Vc中关于DC(设备环境函数(Device Context))的理解
- UltraEdit 给代码注释添加快捷键
- 如何为Linux虚拟机增加另一块虚拟硬盘
- MFC的进程和线程详解
- Facelets 非常适合 JSF
- ARM概述
- 关于设备上下文DC和GDI的理解
- 近期编译android的教训
- PROFINET与以太网之间的关系?
- discuz添加可以插入优酷等视频的代码
- 使用jmx对weblogic进行动态的配置(源代码)
- ecshop后台商品列表和添加修改选择供货商处只显示自己管理的
- 关于BaseAdapter和GridView与后台Service服务进程交换数据的小小的经验总结
- 放弃 乒乓 , 谁是你的好朋友
- linux常用指令