CDC类

来源:互联网 发布:淘宝网购物女装夏装2015款 编辑:程序博客网 时间:2024/05/17 22:49

CDC应用 

M F C用C D C类封装了一个设备环境对象, CDC的成员变量m _ h d c指向它所拥有的设备环境,用户可以创建四种类型的设备环境:
■ 屏幕。
■ 打印机。
■ 只有打印机的信息部分。
■ 位图。
创建一个屏幕设备环境,可以用:
CDC * pDC=GetDC( );
这里的GetDC( )是CWnd类的成员函数,它返回一个允许用户绘制它的窗口客户区的设备
环境;如果还希望绘制非客户区,则使用:
CDC *pDC=GetWindowDC( );
如果需要绘制整个屏幕,如编写一个屏幕保护程序或游戏程序时,可能需要对整屏进行
绘制,这时使用:
CDC *pDC=CDC::FromHandle (::GetDC (NULL));
屏幕设备环境来自三种资源之一:私有设备环境、类设备环境和通用设备环境。
1. 私有设备环境
创建窗口时,私有设备环境便创建了,并在窗口存在期间一直存在。要使窗口创建一个
私有设备环境,必须在目标窗口的窗口类中设置C S _ O W N D C标志,这时GetDC( )返回一个私有设备环境的指针,而不创建一个设备环境。在窗口存在期间,为私有设备环境所作的任何变化都被保存。私有设备环境主要在以图形为中心的应用程序中使用,在那里经常地分配一
个设备环境,这样会占用非常多的C P U时间。
2. 类设备环境
类设备环境在注册一个窗口类时创建,并在窗口类的存在期间一直存在。要使窗口类创
建它自己的类设备环境,必须设置C S _ C L A S S D C标志,GetDC( )只返回指向该类设备环境的指针。此外,在窗口类的存在期间,设备环境一直保留它的值。然而,在第1章中已提及,必须注意不要让两个由相同的窗口类创建的窗口在同一时间绘图;还应注意M i c r o s o f t认为一个类设备环境是旧用法。
3. 通用设备环境
在一个通用资源堆中使用GetDC( )时,一个通用设备环境便创建了。要获得一个通用设
备环境,不要在窗口类中设置C S _ O W N D C或C S _ C L A S S D C。对于更早版本的Wi n d o w s,操作系统本身只有五个预分配的通用设备环境,因此取名G e t D C ( )与CreateDC( )相对应。必须保证在用完设备环境后释放它,否则系统将发生冲突并导致异常终止。虽然设备环境是被创建的,但内存资源还是有限的,因此在使用一个通用设备环境后,仍需用下面语句释放它:
ReleaseDC (pDC);
注意私有设备环境和类设备环境不必释放。
用户最有可能用通用设备环境来做绘图工作。每次释放一个通用设备环境时,为它们设
置的值都被丢失。但是,可以用下面两个C D C成员函数保存和恢复一个设备环境的设置值:
■ S a v e D C ( )保存设备环境的当前状态。
■ RestoreDC( )将设备环境恢复到用SaveDC( )保存的状态。
打印机
要为打印机创建一个设备环境,必须先创建一个C D C类对象,然后使用它的CreateDC( )
成员函数:
CDC dc;
dc.CreateDC(LPCTSTR lpszDriverName,
LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput,
const void* lpInitData)
■ l p s z D r i v e r N a m e是打印机所用的设备驱动程序(如“H P D RV”)。
■ l p s z D e v i c e N a m e是进行打印的打印机设备的名字(如“HP Laserjet III”),设备驱动程序可以支持多种类型设备
■ l p s z O u t p u t指定设备的串口名(如,“LPT1 :”)。
■ lpInitData是任何设备专用的初始化数据。
使用打印机设备环境之后,必须用CDC类的DeleteDC ( )成员函数销毁它。但是,若在堆
栈中创建CDC类,则程序返回时,设备环境自动被删除。
CMyClass : : Drawing(。。。)
{
CDC dc;
dc . CreateDC(。。。) ;
} // CDC object and Device Context destroyed
要创建一个可以直接绘制位图的设备环境,必须先用C D C的CreateCompatibleDC( )成员
函数创建一个C D C类对象。
CDC dc;
dc.CreateCompatibleDC(HDC hdc);
CreateCompatibleDC( )用设备环境的设置值初始化它所创建的设备环境对象,因此,取
名兼容D C。应该从显示被创建的位图的设备(如屏幕、打印机)传递一个设备环境。
要真实地绘制一个位图,还必须创建一个空位图对象,并使该设备环境与该位图相关联。
CDC dc; // create CDC object
CBitmap bitmap; // create CBitmap object
d c . C r e a t e C o m p a t i b l e D C ( p D C ) ; // create Device Context object
bitmap.CreateCompatibleBitmap(pDC, ICON_WIDTH, ICON_HEIGHT);
// create Bitmap object
d c . S e l e c t O b j e c t ( & b i t m a p ) ; // point memory Device Context
// to this bitmap
绘制位图以后,必须用下列语句删除设备环境:
d c.DeleteDC( );
信息
C D C提供的最后一种设备环境类型是打印机的信息部分。
CDC dc;
d c . C r e a t e I C ( ) ;
这里的调用变量与CreateDC( )中一样。
信息设备环境只包含一台打印机或其他非屏幕设备的特性,如颜色支持等。创建信息设
备环境的速度比创建一个常规的打印机设备环境速度快,因为它只包含设备的特性。信息使
用后应当删除,与前面描述的一样。
注意正如C W n d类和它控制的窗口一样,C D C类可以用Attach( )把自己捆绑到一个已
有的设备环境上,并可用Detach( )解开自己。创建一个封装已有的设备环境的临时
C D C对象,可以用FromHandle( )。但是,当应用程序进入空闲循环时,这一临时类对
象将被删除。

 

CWnd::GetDC

CDC* GetDC( );

返回值:
如果调用成功,则返回CWnd客户区的设备环境;否则,返回NULL。这个指针可能是临时的,不能被保存以供将来使用。

说明:
这个函数获得一个指针,指向一个客户区的公用的、属于类的或者私有的设备环境,依赖于为CWnd指定的类风格。对于公用的设备环境,GetDC每次获得设备环境时都给它赋予缺省值。对于属于类的或者私有的设备环境,GetDC保持原来的属性不变。在随后的图形设备接口(GDI)函数中可以使用设备环境以在客户区中绘图。
除非设备环境属于一个窗口类,否则在绘图之后必须调用ReleaseDC成员函数以释放设备环境。由于在同一时刻只有五个公用设备环境可供使用,因此如果释放设备环境时失败,可能导致其它应用程序不能访问设备环境。
如果在注册窗口类的时候,在WNDCLASS的风格中指定了CS_CLASSDC,CS_OWNDC或CS_PARENTDC,则GetDC成员函数将返回属于CWnd类的设备环境。

例如:

CDC* pDC=GetDC();

CDC应用 

M F C用C D C类封装了一个设备环境对象, CDC的成员变量m _ h d c指向它所拥有的设备环境,用户可以创建四种类型的设备环境:
■ 屏幕。
■ 打印机。
■ 只有打印机的信息部分。
■ 位图。
创建一个屏幕设备环境,可以用:
CDC * pDC=GetDC( );
这里的GetDC( )是CWnd类的成员函数,它返回一个允许用户绘制它的窗口客户区的设备
环境;如果还希望绘制非客户区,则使用:
CDC *pDC=GetWindowDC( );
如果需要绘制整个屏幕,如编写一个屏幕保护程序或游戏程序时,可能需要对整屏进行
绘制,这时使用:
CDC *pDC=CDC::FromHandle (::GetDC (NULL));
屏幕设备环境来自三种资源之一:私有设备环境、类设备环境和通用设备环境。
1. 私有设备环境
创建窗口时,私有设备环境便创建了,并在窗口存在期间一直存在。要使窗口创建一个
私有设备环境,必须在目标窗口的窗口类中设置C S _ O W N D C标志,这时GetDC( )返回一个私有设备环境的指针,而不创建一个设备环境。在窗口存在期间,为私有设备环境所作的任何变化都被保存。私有设备环境主要在以图形为中心的应用程序中使用,在那里经常地分配一
个设备环境,这样会占用非常多的C P U时间。
2. 类设备环境
类设备环境在注册一个窗口类时创建,并在窗口类的存在期间一直存在。要使窗口类创
建它自己的类设备环境,必须设置C S _ C L A S S D C标志,GetDC( )只返回指向该类设备环境的指针。此外,在窗口类的存在期间,设备环境一直保留它的值。然而,在第1章中已提及,必须注意不要让两个由相同的窗口类创建的窗口在同一时间绘图;还应注意M i c r o s o f t认为一个类设备环境是旧用法。
3. 通用设备环境
在一个通用资源堆中使用GetDC( )时,一个通用设备环境便创建了。要获得一个通用设
备环境,不要在窗口类中设置C S _ O W N D C或C S _ C L A S S D C。对于更早版本的Wi n d o w s,操作系统本身只有五个预分配的通用设备环境,因此取名G e t D C ( )与CreateDC( )相对应。必须保证在用完设备环境后释放它,否则系统将发生冲突并导致异常终止。虽然设备环境是被创建的,但内存资源还是有限的,因此在使用一个通用设备环境后,仍需用下面语句释放它:
ReleaseDC (pDC);
注意私有设备环境和类设备环境不必释放。
用户最有可能用通用设备环境来做绘图工作。每次释放一个通用设备环境时,为它们设
置的值都被丢失。但是,可以用下面两个C D C成员函数保存和恢复一个设备环境的设置值:
■ S a v e D C ( )保存设备环境的当前状态。
■ RestoreDC( )将设备环境恢复到用SaveDC( )保存的状态。
打印机
要为打印机创建一个设备环境,必须先创建一个C D C类对象,然后使用它的CreateDC( )
成员函数:
CDC dc;
dc.CreateDC(LPCTSTR lpszDriverName,
LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput,
const void* lpInitData)
■ l p s z D r i v e r N a m e是打印机所用的设备驱动程序(如“H P D RV”)。
■ l p s z D e v i c e N a m e是进行打印的打印机设备的名字(如“HP Laserjet III”),设备驱动程序可以支持多种类型设备
■ l p s z O u t p u t指定设备的串口名(如,“LPT1 :”)。
■ lpInitData是任何设备专用的初始化数据。
使用打印机设备环境之后,必须用CDC类的DeleteDC ( )成员函数销毁它。但是,若在堆
栈中创建CDC类,则程序返回时,设备环境自动被删除。
CMyClass : : Drawing(。。。)
{
CDC dc;
dc . CreateDC(。。。) ;
} // CDC object and Device Context destroyed
要创建一个可以直接绘制位图的设备环境,必须先用C D C的CreateCompatibleDC( )成员
函数创建一个C D C类对象。
CDC dc;
dc.CreateCompatibleDC(HDC hdc);
CreateCompatibleDC( )用设备环境的设置值初始化它所创建的设备环境对象,因此,取
名兼容D C。应该从显示被创建的位图的设备(如屏幕、打印机)传递一个设备环境。
要真实地绘制一个位图,还必须创建一个空位图对象,并使该设备环境与该位图相关联。
CDC dc; // create CDC object
CBitmap bitmap; // create CBitmap object
d c . C r e a t e C o m p a t i b l e D C ( p D C ) ; // create Device Context object
bitmap.CreateCompatibleBitmap(pDC, ICON_WIDTH, ICON_HEIGHT);
// create Bitmap object
d c . S e l e c t O b j e c t ( & b i t m a p ) ; // point memory Device Context
// to this bitmap
绘制位图以后,必须用下列语句删除设备环境:
d c.DeleteDC( );
信息
C D C提供的最后一种设备环境类型是打印机的信息部分。
CDC dc;
d c . C r e a t e I C ( ) ;
这里的调用变量与CreateDC( )中一样。
信息设备环境只包含一台打印机或其他非屏幕设备的特性,如颜色支持等。创建信息设
备环境的速度比创建一个常规的打印机设备环境速度快,因为它只包含设备的特性。信息使
用后应当删除,与前面描述的一样。
注意正如C W n d类和它控制的窗口一样,C D C类可以用Attach( )把自己捆绑到一个已
有的设备环境上,并可用Detach( )解开自己。创建一个封装已有的设备环境的临时
C D C对象,可以用FromHandle( )。但是,当应用程序进入空闲循环时,这一临时类对
象将被删除。

 

CWnd::GetDC

CDC* GetDC( );

返回值:
如果调用成功,则返回CWnd客户区的设备环境;否则,返回NULL。这个指针可能是临时的,不能被保存以供将来使用。

说明:
这个函数获得一个指针,指向一个客户区的公用的、属于类的或者私有的设备环境,依赖于为CWnd指定的类风格。对于公用的设备环境,GetDC每次获得设备环境时都给它赋予缺省值。对于属于类的或者私有的设备环境,GetDC保持原来的属性不变。在随后的图形设备接口(GDI)函数中可以使用设备环境以在客户区中绘图。
除非设备环境属于一个窗口类,否则在绘图之后必须调用ReleaseDC成员函数以释放设备环境。由于在同一时刻只有五个公用设备环境可供使用,因此如果释放设备环境时失败,可能导致其它应用程序不能访问设备环境。
如果在注册窗口类的时候,在WNDCLASS的风格中指定了CS_CLASSDC,CS_OWNDC或CS_PARENTDC,则GetDC成员函数将返回属于CWnd类的设备环境。

例如:

CDC* pDC=GetDC();




CDC应用 

M F C用C D C类封装了一个设备环境对象, CDC的成员变量m _ h d c指向它所拥有的设备环境,用户可以创建四种类型的设备环境:
■ 屏幕。
■ 打印机。
■ 只有打印机的信息部分。
■ 位图。
创建一个屏幕设备环境,可以用:
CDC * pDC=GetDC( );
这里的GetDC( )是CWnd类的成员函数,它返回一个允许用户绘制它的窗口客户区的设备
环境;如果还希望绘制非客户区,则使用:
CDC *pDC=GetWindowDC( );
如果需要绘制整个屏幕,如编写一个屏幕保护程序或游戏程序时,可能需要对整屏进行
绘制,这时使用:
CDC *pDC=CDC::FromHandle (::GetDC (NULL));
屏幕设备环境来自三种资源之一:私有设备环境、类设备环境和通用设备环境。
1. 私有设备环境
创建窗口时,私有设备环境便创建了,并在窗口存在期间一直存在。要使窗口创建一个
私有设备环境,必须在目标窗口的窗口类中设置C S _ O W N D C标志,这时GetDC( )返回一个私有设备环境的指针,而不创建一个设备环境。在窗口存在期间,为私有设备环境所作的任何变化都被保存。私有设备环境主要在以图形为中心的应用程序中使用,在那里经常地分配一
个设备环境,这样会占用非常多的C P U时间。
2. 类设备环境
类设备环境在注册一个窗口类时创建,并在窗口类的存在期间一直存在。要使窗口类创
建它自己的类设备环境,必须设置C S _ C L A S S D C标志,GetDC( )只返回指向该类设备环境的指针。此外,在窗口类的存在期间,设备环境一直保留它的值。然而,在第1章中已提及,必须注意不要让两个由相同的窗口类创建的窗口在同一时间绘图;还应注意M i c r o s o f t认为一个类设备环境是旧用法。
3. 通用设备环境
在一个通用资源堆中使用GetDC( )时,一个通用设备环境便创建了。要获得一个通用设
备环境,不要在窗口类中设置C S _ O W N D C或C S _ C L A S S D C。对于更早版本的Wi n d o w s,操作系统本身只有五个预分配的通用设备环境,因此取名G e t D C ( )与CreateDC( )相对应。必须保证在用完设备环境后释放它,否则系统将发生冲突并导致异常终止。虽然设备环境是被创建的,但内存资源还是有限的,因此在使用一个通用设备环境后,仍需用下面语句释放它:
ReleaseDC (pDC);
注意私有设备环境和类设备环境不必释放。
用户最有可能用通用设备环境来做绘图工作。每次释放一个通用设备环境时,为它们设
置的值都被丢失。但是,可以用下面两个C D C成员函数保存和恢复一个设备环境的设置值:
■ S a v e D C ( )保存设备环境的当前状态。
■ RestoreDC( )将设备环境恢复到用SaveDC( )保存的状态。
打印机
要为打印机创建一个设备环境,必须先创建一个C D C类对象,然后使用它的CreateDC( )
成员函数:
CDC dc;
dc.CreateDC(LPCTSTR lpszDriverName,
LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput,
const void* lpInitData)
■ l p s z D r i v e r N a m e是打印机所用的设备驱动程序(如“H P D RV”)。
■ l p s z D e v i c e N a m e是进行打印的打印机设备的名字(如“HP Laserjet III”),设备驱动程序可以支持多种类型设备
■ l p s z O u t p u t指定设备的串口名(如,“LPT1 :”)。
■ lpInitData是任何设备专用的初始化数据。
使用打印机设备环境之后,必须用CDC类的DeleteDC ( )成员函数销毁它。但是,若在堆
栈中创建CDC类,则程序返回时,设备环境自动被删除。
CMyClass : : Drawing(。。。)
{
CDC dc;
dc . CreateDC(。。。) ;
} // CDC object and Device Context destroyed
要创建一个可以直接绘制位图的设备环境,必须先用C D C的CreateCompatibleDC( )成员
函数创建一个C D C类对象。
CDC dc;
dc.CreateCompatibleDC(HDC hdc);
CreateCompatibleDC( )用设备环境的设置值初始化它所创建的设备环境对象,因此,取
名兼容D C。应该从显示被创建的位图的设备(如屏幕、打印机)传递一个设备环境。
要真实地绘制一个位图,还必须创建一个空位图对象,并使该设备环境与该位图相关联。
CDC dc; // create CDC object
CBitmap bitmap; // create CBitmap object
d c . C r e a t e C o m p a t i b l e D C ( p D C ) ; // create Device Context object
bitmap.CreateCompatibleBitmap(pDC, ICON_WIDTH, ICON_HEIGHT);
// create Bitmap object
d c . S e l e c t O b j e c t ( & b i t m a p ) ; // point memory Device Context
// to this bitmap
绘制位图以后,必须用下列语句删除设备环境:
d c.DeleteDC( );
信息
C D C提供的最后一种设备环境类型是打印机的信息部分。
CDC dc;
d c . C r e a t e I C ( ) ;
这里的调用变量与CreateDC( )中一样。
信息设备环境只包含一台打印机或其他非屏幕设备的特性,如颜色支持等。创建信息设
备环境的速度比创建一个常规的打印机设备环境速度快,因为它只包含设备的特性。信息使
用后应当删除,与前面描述的一样。
注意正如C W n d类和它控制的窗口一样,C D C类可以用Attach( )把自己捆绑到一个已
有的设备环境上,并可用Detach( )解开自己。创建一个封装已有的设备环境的临时
C D C对象,可以用FromHandle( )。但是,当应用程序进入空闲循环时,这一临时类对
象将被删除。

 

CWnd::GetDC

CDC* GetDC( );

返回值:
如果调用成功,则返回CWnd客户区的设备环境;否则,返回NULL。这个指针可能是临时的,不能被保存以供将来使用。

说明:
这个函数获得一个指针,指向一个客户区的公用的、属于类的或者私有的设备环境,依赖于为CWnd指定的类风格。对于公用的设备环境,GetDC每次获得设备环境时都给它赋予缺省值。对于属于类的或者私有的设备环境,GetDC保持原来的属性不变。在随后的图形设备接口(GDI)函数中可以使用设备环境以在客户区中绘图。
除非设备环境属于一个窗口类,否则在绘图之后必须调用ReleaseDC成员函数以释放设备环境。由于在同一时刻只有五个公用设备环境可供使用,因此如果释放设备环境时失败,可能导致其它应用程序不能访问设备环境。
如果在注册窗口类的时候,在WNDCLASS的风格中指定了CS_CLASSDC,CS_OWNDC或CS_PARENTDC,则GetDC成员函数将返回属于CWnd类的设备环境。

例如:

CDC* pDC=GetDC();



CDC应用 

M F C用C D C类封装了一个设备环境对象, CDC的成员变量m _ h d c指向它所拥有的设备环境,用户可以创建四种类型的设备环境:
■ 屏幕。
■ 打印机。
■ 只有打印机的信息部分。
■ 位图。
创建一个屏幕设备环境,可以用:
CDC * pDC=GetDC( );
这里的GetDC( )是CWnd类的成员函数,它返回一个允许用户绘制它的窗口客户区的设备
环境;如果还希望绘制非客户区,则使用:
CDC *pDC=GetWindowDC( );
如果需要绘制整个屏幕,如编写一个屏幕保护程序或游戏程序时,可能需要对整屏进行
绘制,这时使用:
CDC *pDC=CDC::FromHandle (::GetDC (NULL));
屏幕设备环境来自三种资源之一:私有设备环境、类设备环境和通用设备环境。
1. 私有设备环境
创建窗口时,私有设备环境便创建了,并在窗口存在期间一直存在。要使窗口创建一个
私有设备环境,必须在目标窗口的窗口类中设置C S _ O W N D C标志,这时GetDC( )返回一个私有设备环境的指针,而不创建一个设备环境。在窗口存在期间,为私有设备环境所作的任何变化都被保存。私有设备环境主要在以图形为中心的应用程序中使用,在那里经常地分配一
个设备环境,这样会占用非常多的C P U时间。
2. 类设备环境
类设备环境在注册一个窗口类时创建,并在窗口类的存在期间一直存在。要使窗口类创
建它自己的类设备环境,必须设置C S _ C L A S S D C标志,GetDC( )只返回指向该类设备环境的指针。此外,在窗口类的存在期间,设备环境一直保留它的值。然而,在第1章中已提及,必须注意不要让两个由相同的窗口类创建的窗口在同一时间绘图;还应注意M i c r o s o f t认为一个类设备环境是旧用法。
3. 通用设备环境
在一个通用资源堆中使用GetDC( )时,一个通用设备环境便创建了。要获得一个通用设
备环境,不要在窗口类中设置C S _ O W N D C或C S _ C L A S S D C。对于更早版本的Wi n d o w s,操作系统本身只有五个预分配的通用设备环境,因此取名G e t D C ( )与CreateDC( )相对应。必须保证在用完设备环境后释放它,否则系统将发生冲突并导致异常终止。虽然设备环境是被创建的,但内存资源还是有限的,因此在使用一个通用设备环境后,仍需用下面语句释放它:
ReleaseDC (pDC);
注意私有设备环境和类设备环境不必释放。
用户最有可能用通用设备环境来做绘图工作。每次释放一个通用设备环境时,为它们设
置的值都被丢失。但是,可以用下面两个C D C成员函数保存和恢复一个设备环境的设置值:
■ S a v e D C ( )保存设备环境的当前状态。
■ RestoreDC( )将设备环境恢复到用SaveDC( )保存的状态。
打印机
要为打印机创建一个设备环境,必须先创建一个C D C类对象,然后使用它的CreateDC( )
成员函数:
CDC dc;
dc.CreateDC(LPCTSTR lpszDriverName,
LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput,
const void* lpInitData)
■ l p s z D r i v e r N a m e是打印机所用的设备驱动程序(如“H P D RV”)。
■ l p s z D e v i c e N a m e是进行打印的打印机设备的名字(如“HP Laserjet III”),设备驱动程序可以支持多种类型设备
■ l p s z O u t p u t指定设备的串口名(如,“LPT1 :”)。
■ lpInitData是任何设备专用的初始化数据。
使用打印机设备环境之后,必须用CDC类的DeleteDC ( )成员函数销毁它。但是,若在堆
栈中创建CDC类,则程序返回时,设备环境自动被删除。
CMyClass : : Drawing(。。。)
{
CDC dc;
dc . CreateDC(。。。) ;
} // CDC object and Device Context destroyed
要创建一个可以直接绘制位图的设备环境,必须先用C D C的CreateCompatibleDC( )成员
函数创建一个C D C类对象。
CDC dc;
dc.CreateCompatibleDC(HDC hdc);
CreateCompatibleDC( )用设备环境的设置值初始化它所创建的设备环境对象,因此,取
名兼容D C。应该从显示被创建的位图的设备(如屏幕、打印机)传递一个设备环境。
要真实地绘制一个位图,还必须创建一个空位图对象,并使该设备环境与该位图相关联。
CDC dc; // create CDC object
CBitmap bitmap; // create CBitmap object
d c . C r e a t e C o m p a t i b l e D C ( p D C ) ; // create Device Context object
bitmap.CreateCompatibleBitmap(pDC, ICON_WIDTH, ICON_HEIGHT);
// create Bitmap object
d c . S e l e c t O b j e c t ( & b i t m a p ) ; // point memory Device Context
// to this bitmap
绘制位图以后,必须用下列语句删除设备环境:
d c.DeleteDC( );
信息
C D C提供的最后一种设备环境类型是打印机的信息部分。
CDC dc;
d c . C r e a t e I C ( ) ;
这里的调用变量与CreateDC( )中一样。
信息设备环境只包含一台打印机或其他非屏幕设备的特性,如颜色支持等。创建信息设
备环境的速度比创建一个常规的打印机设备环境速度快,因为它只包含设备的特性。信息使
用后应当删除,与前面描述的一样。
注意正如C W n d类和它控制的窗口一样,C D C类可以用Attach( )把自己捆绑到一个已
有的设备环境上,并可用Detach( )解开自己。创建一个封装已有的设备环境的临时
C D C对象,可以用FromHandle( )。但是,当应用程序进入空闲循环时,这一临时类对
象将被删除。

 

CWnd::GetDC

CDC* GetDC( );

返回值:
如果调用成功,则返回CWnd客户区的设备环境;否则,返回NULL。这个指针可能是临时的,不能被保存以供将来使用。

说明:
这个函数获得一个指针,指向一个客户区的公用的、属于类的或者私有的设备环境,依赖于为CWnd指定的类风格。对于公用的设备环境,GetDC每次获得设备环境时都给它赋予缺省值。对于属于类的或者私有的设备环境,GetDC保持原来的属性不变。在随后的图形设备接口(GDI)函数中可以使用设备环境以在客户区中绘图。
除非设备环境属于一个窗口类,否则在绘图之后必须调用ReleaseDC成员函数以释放设备环境。由于在同一时刻只有五个公用设备环境可供使用,因此如果释放设备环境时失败,可能导致其它应用程序不能访问设备环境。
如果在注册窗口类的时候,在WNDCLASS的风格中指定了CS_CLASSDC,CS_OWNDC或CS_PARENTDC,则GetDC成员函数将返回属于CWnd类的设备环境。

例如:

CDC* pDC=GetDC();

CDC应用 

M F C用C D C类封装了一个设备环境对象, CDC的成员变量m _ h d c指向它所拥有的设备环境,用户可以创建四种类型的设备环境:
■ 屏幕。
■ 打印机。
■ 只有打印机的信息部分。
■ 位图。
创建一个屏幕设备环境,可以用:
CDC * pDC=GetDC( );
这里的GetDC( )是CWnd类的成员函数,它返回一个允许用户绘制它的窗口客户区的设备
环境;如果还希望绘制非客户区,则使用:
CDC *pDC=GetWindowDC( );
如果需要绘制整个屏幕,如编写一个屏幕保护程序或游戏程序时,可能需要对整屏进行
绘制,这时使用:
CDC *pDC=CDC::FromHandle (::GetDC (NULL));
屏幕设备环境来自三种资源之一:私有设备环境、类设备环境和通用设备环境。
1. 私有设备环境
创建窗口时,私有设备环境便创建了,并在窗口存在期间一直存在。要使窗口创建一个
私有设备环境,必须在目标窗口的窗口类中设置C S _ O W N D C标志,这时GetDC( )返回一个私有设备环境的指针,而不创建一个设备环境。在窗口存在期间,为私有设备环境所作的任何变化都被保存。私有设备环境主要在以图形为中心的应用程序中使用,在那里经常地分配一
个设备环境,这样会占用非常多的C P U时间。
2. 类设备环境
类设备环境在注册一个窗口类时创建,并在窗口类的存在期间一直存在。要使窗口类创
建它自己的类设备环境,必须设置C S _ C L A S S D C标志,GetDC( )只返回指向该类设备环境的指针。此外,在窗口类的存在期间,设备环境一直保留它的值。然而,在第1章中已提及,必须注意不要让两个由相同的窗口类创建的窗口在同一时间绘图;还应注意M i c r o s o f t认为一个类设备环境是旧用法。
3. 通用设备环境
在一个通用资源堆中使用GetDC( )时,一个通用设备环境便创建了。要获得一个通用设
备环境,不要在窗口类中设置C S _ O W N D C或C S _ C L A S S D C。对于更早版本的Wi n d o w s,操作系统本身只有五个预分配的通用设备环境,因此取名G e t D C ( )与CreateDC( )相对应。必须保证在用完设备环境后释放它,否则系统将发生冲突并导致异常终止。虽然设备环境是被创建的,但内存资源还是有限的,因此在使用一个通用设备环境后,仍需用下面语句释放它:
ReleaseDC (pDC);
注意私有设备环境和类设备环境不必释放。
用户最有可能用通用设备环境来做绘图工作。每次释放一个通用设备环境时,为它们设
置的值都被丢失。但是,可以用下面两个C D C成员函数保存和恢复一个设备环境的设置值:
■ S a v e D C ( )保存设备环境的当前状态。
■ RestoreDC( )将设备环境恢复到用SaveDC( )保存的状态。
打印机
要为打印机创建一个设备环境,必须先创建一个C D C类对象,然后使用它的CreateDC( )
成员函数:
CDC dc;
dc.CreateDC(LPCTSTR lpszDriverName,
LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput,
const void* lpInitData)
■ l p s z D r i v e r N a m e是打印机所用的设备驱动程序(如“H P D RV”)。
■ l p s z D e v i c e N a m e是进行打印的打印机设备的名字(如“HP Laserjet III”),设备驱动程序可以支持多种类型设备
■ l p s z O u t p u t指定设备的串口名(如,“LPT1 :”)。
■ lpInitData是任何设备专用的初始化数据。
使用打印机设备环境之后,必须用CDC类的DeleteDC ( )成员函数销毁它。但是,若在堆
栈中创建CDC类,则程序返回时,设备环境自动被删除。
CMyClass : : Drawing(。。。)
{
CDC dc;
dc . CreateDC(。。。) ;
} // CDC object and Device Context destroyed
要创建一个可以直接绘制位图的设备环境,必须先用C D C的CreateCompatibleDC( )成员
函数创建一个C D C类对象。
CDC dc;
dc.CreateCompatibleDC(HDC hdc);
CreateCompatibleDC( )用设备环境的设置值初始化它所创建的设备环境对象,因此,取
名兼容D C。应该从显示被创建的位图的设备(如屏幕、打印机)传递一个设备环境。
要真实地绘制一个位图,还必须创建一个空位图对象,并使该设备环境与该位图相关联。
CDC dc; // create CDC object
CBitmap bitmap; // create CBitmap object
d c . C r e a t e C o m p a t i b l e D C ( p D C ) ; // create Device Context object
bitmap.CreateCompatibleBitmap(pDC, ICON_WIDTH, ICON_HEIGHT);
// create Bitmap object
d c . S e l e c t O b j e c t ( & b i t m a p ) ; // point memory Device Context
// to this bitmap
绘制位图以后,必须用下列语句删除设备环境:
d c.DeleteDC( );
信息
C D C提供的最后一种设备环境类型是打印机的信息部分。
CDC dc;
d c . C r e a t e I C ( ) ;
这里的调用变量与CreateDC( )中一样。
信息设备环境只包含一台打印机或其他非屏幕设备的特性,如颜色支持等。创建信息设
备环境的速度比创建一个常规的打印机设备环境速度快,因为它只包含设备的特性。信息使
用后应当删除,与前面描述的一样。
注意正如C W n d类和它控制的窗口一样,C D C类可以用Attach( )把自己捆绑到一个已
有的设备环境上,并可用Detach( )解开自己。创建一个封装已有的设备环境的临时
C D C对象,可以用FromHandle( )。但是,当应用程序进入空闲循环时,这一临时类对
象将被删除。

 

CWnd::GetDC

CDC* GetDC( );

返回值:
如果调用成功,则返回CWnd客户区的设备环境;否则,返回NULL。这个指针可能是临时的,不能被保存以供将来使用。

说明:
这个函数获得一个指针,指向一个客户区的公用的、属于类的或者私有的设备环境,依赖于为CWnd指定的类风格。对于公用的设备环境,GetDC每次获得设备环境时都给它赋予缺省值。对于属于类的或者私有的设备环境,GetDC保持原来的属性不变。在随后的图形设备接口(GDI)函数中可以使用设备环境以在客户区中绘图。
除非设备环境属于一个窗口类,否则在绘图之后必须调用ReleaseDC成员函数以释放设备环境。由于在同一时刻只有五个公用设备环境可供使用,因此如果释放设备环境时失败,可能导致其它应用程序不能访问设备环境。
如果在注册窗口类的时候,在WNDCLASS的风格中指定了CS_CLASSDC,CS_OWNDC或CS_PARENTDC,则GetDC成员函数将返回属于CWnd类的设备环境。

例如:

CDC* pDC=GetDC();

CDC应用 

M F C用C D C类封装了一个设备环境对象, CDC的成员变量m _ h d c指向它所拥有的设备环境,用户可以创建四种类型的设备环境:
■ 屏幕。
■ 打印机。
■ 只有打印机的信息部分。
■ 位图。
创建一个屏幕设备环境,可以用:
CDC * pDC=GetDC( );
这里的GetDC( )是CWnd类的成员函数,它返回一个允许用户绘制它的窗口客户区的设备
环境;如果还希望绘制非客户区,则使用:
CDC *pDC=GetWindowDC( );
如果需要绘制整个屏幕,如编写一个屏幕保护程序或游戏程序时,可能需要对整屏进行
绘制,这时使用:
CDC *pDC=CDC::FromHandle (::GetDC (NULL));
屏幕设备环境来自三种资源之一:私有设备环境、类设备环境和通用设备环境。
1. 私有设备环境
创建窗口时,私有设备环境便创建了,并在窗口存在期间一直存在。要使窗口创建一个
私有设备环境,必须在目标窗口的窗口类中设置C S _ O W N D C标志,这时GetDC( )返回一个私有设备环境的指针,而不创建一个设备环境。在窗口存在期间,为私有设备环境所作的任何变化都被保存。私有设备环境主要在以图形为中心的应用程序中使用,在那里经常地分配一
个设备环境,这样会占用非常多的C P U时间。
2. 类设备环境
类设备环境在注册一个窗口类时创建,并在窗口类的存在期间一直存在。要使窗口类创
建它自己的类设备环境,必须设置C S _ C L A S S D C标志,GetDC( )只返回指向该类设备环境的指针。此外,在窗口类的存在期间,设备环境一直保留它的值。然而,在第1章中已提及,必须注意不要让两个由相同的窗口类创建的窗口在同一时间绘图;还应注意M i c r o s o f t认为一个类设备环境是旧用法。
3. 通用设备环境
在一个通用资源堆中使用GetDC( )时,一个通用设备环境便创建了。要获得一个通用设
备环境,不要在窗口类中设置C S _ O W N D C或C S _ C L A S S D C。对于更早版本的Wi n d o w s,操作系统本身只有五个预分配的通用设备环境,因此取名G e t D C ( )与CreateDC( )相对应。必须保证在用完设备环境后释放它,否则系统将发生冲突并导致异常终止。虽然设备环境是被创建的,但内存资源还是有限的,因此在使用一个通用设备环境后,仍需用下面语句释放它:
ReleaseDC (pDC);
注意私有设备环境和类设备环境不必释放。
用户最有可能用通用设备环境来做绘图工作。每次释放一个通用设备环境时,为它们设
置的值都被丢失。但是,可以用下面两个C D C成员函数保存和恢复一个设备环境的设置值:
■ S a v e D C ( )保存设备环境的当前状态。
■ RestoreDC( )将设备环境恢复到用SaveDC( )保存的状态。
打印机
要为打印机创建一个设备环境,必须先创建一个C D C类对象,然后使用它的CreateDC( )
成员函数:
CDC dc;
dc.CreateDC(LPCTSTR lpszDriverName,
LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput,
const void* lpInitData)
■ l p s z D r i v e r N a m e是打印机所用的设备驱动程序(如“H P D RV”)。
■ l p s z D e v i c e N a m e是进行打印的打印机设备的名字(如“HP Laserjet III”),设备驱动程序可以支持多种类型设备
■ l p s z O u t p u t指定设备的串口名(如,“LPT1 :”)。
■ lpInitData是任何设备专用的初始化数据。
使用打印机设备环境之后,必须用CDC类的DeleteDC ( )成员函数销毁它。但是,若在堆
栈中创建CDC类,则程序返回时,设备环境自动被删除。
CMyClass : : Drawing(。。。)
{
CDC dc;
dc . CreateDC(。。。) ;
} // CDC object and Device Context destroyed
要创建一个可以直接绘制位图的设备环境,必须先用C D C的CreateCompatibleDC( )成员
函数创建一个C D C类对象。
CDC dc;
dc.CreateCompatibleDC(HDC hdc);
CreateCompatibleDC( )用设备环境的设置值初始化它所创建的设备环境对象,因此,取
名兼容D C。应该从显示被创建的位图的设备(如屏幕、打印机)传递一个设备环境。
要真实地绘制一个位图,还必须创建一个空位图对象,并使该设备环境与该位图相关联。
CDC dc; // create CDC object
CBitmap bitmap; // create CBitmap object
d c . C r e a t e C o m p a t i b l e D C ( p D C ) ; // create Device Context object
bitmap.CreateCompatibleBitmap(pDC, ICON_WIDTH, ICON_HEIGHT);
// create Bitmap object
d c . S e l e c t O b j e c t ( & b i t m a p ) ; // point memory Device Context
// to this bitmap
绘制位图以后,必须用下列语句删除设备环境:
d c.DeleteDC( );
信息
C D C提供的最后一种设备环境类型是打印机的信息部分。
CDC dc;
d c . C r e a t e I C ( ) ;
这里的调用变量与CreateDC( )中一样。
信息设备环境只包含一台打印机或其他非屏幕设备的特性,如颜色支持等。创建信息设
备环境的速度比创建一个常规的打印机设备环境速度快,因为它只包含设备的特性。信息使
用后应当删除,与前面描述的一样。
注意正如C W n d类和它控制的窗口一样,C D C类可以用Attach( )把自己捆绑到一个已
有的设备环境上,并可用Detach( )解开自己。创建一个封装已有的设备环境的临时
C D C对象,可以用FromHandle( )。但是,当应用程序进入空闲循环时,这一临时类对
象将被删除。

 

CWnd::GetDC

CDC* GetDC( );

返回值:
如果调用成功,则返回CWnd客户区的设备环境;否则,返回NULL。这个指针可能是临时的,不能被保存以供将来使用。

说明:
这个函数获得一个指针,指向一个客户区的公用的、属于类的或者私有的设备环境,依赖于为CWnd指定的类风格。对于公用的设备环境,GetDC每次获得设备环境时都给它赋予缺省值。对于属于类的或者私有的设备环境,GetDC保持原来的属性不变。在随后的图形设备接口(GDI)函数中可以使用设备环境以在客户区中绘图。
除非设备环境属于一个窗口类,否则在绘图之后必须调用ReleaseDC成员函数以释放设备环境。由于在同一时刻只有五个公用设备环境可供使用,因此如果释放设备环境时失败,可能导致其它应用程序不能访问设备环境。
如果在注册窗口类的时候,在WNDCLASS的风格中指定了CS_CLASSDC,CS_OWNDC或CS_PARENTDC,则GetDC成员函数将返回属于CWnd类的设备环境。

例如:

CDC* pDC=GetDC();

热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米4手机拆机信号不好怎么办 荣耀自带游览器无法正常打开怎么办 苹果4s电池越来越不耐用怎么办 苹果4s电池不耐用了怎么办 苹果手机4s电池不耐用怎么办 红米4s电池不耐用怎么办 32位app私密相册打不开怎么办 红米手机取卡针断手机里了怎么办 我差评了客服打电话骂我怎么办 顺丰快递在预计时间没有回来怎么办 同款商品比京东便宜怎么办 京东自营不支持7天退货怎么办 天猫买了一个月的电动车坏了怎么办 发票号码和机打号码不一致怎么办 交电费的本子弄丢了怎么办 快递正在派件中发现地址错了怎么办 快递当天送达当天签收还算延怎么办 深圳国税公众号预约取号公司怎么办 社保买了停了2年怎么办 qq号被冻结申请不回来了怎么办 qq号被冻结 手机密保忘了怎么办 微信账号封了2天怎么办 买qq号被申诉找回了怎么办 收到了京东白条的催款通知单怎么办 成都买房社保不够两年怎么办18年 电话号码给人设置成骚扰电话怎么办 找不到领导电话不接短信不回怎么办 微信账号被别人手机号冻结了怎么办 微信冻结了手机号也让人换了怎么办 顺丰快递拒收退回丢件了怎么办 京东买东西快递电话没有听到怎么办 在京东购物自己电话号输错了怎么办 北京房子卖了户口没地方迁怎么办 微信弄丢了微信密码找不到了怎么办 微信背人用过找不到密码怎么办 超市的微信支付宝收付款怎么办 办理联华超市的会员储蓄卡怎么办 卡杰文具密码本如果忘记密码怎么办 火狐浏览器阻止要访问的网页怎么办 点我达被永久停用了怎么办 刚下的软件点开系统显示停用怎么办