在windows平台下,所以的图形操作都是利用DC来完成的;
3、CClientDC dc(this); //已经将
ReleaseDC封装在里面了,不需要再调用
ReleaseDC.
在相应WM_PAINT消息的代码中,要得到窗口的图形数据,必须调用
BeginPaint函数。
BeginPaint函数也只能在WM_PAINT消息中使用。在其他地方,只有使用GetDC来得到DC的句柄。调用ReleaseDC函数来释放DC所占用的资源,否则会引起内存泄漏。
this指针:
是一个隐含的指针,它指向对象本身的,代表了对象的地址。
设备描述表:
设备描述表是一个定义一组图形对象及其属性、影响输出的图形方式(数据)结构
。windows提供设备描述表,用于应用程序和物理设备之间进行交互,从而提供了应用程序设计的平台无关性。设备描述表又称为设备上下文,或者设备环境。
设备描述表是一种数据结构,它包括了一个设备(如显示器和打印机)的绘制属性相关的信息。所有的绘制操作通过设备描述表进行。设备描述表与大多WIN32结构不同,应用程序不能直接访问设备描述表,只能由各种相关API函数通过设备描述表的句柄间接访问该结构。
设备描述表总是与某种系统硬件设备相关 。比如屏幕设备描述表与显示设备相关,打印机设备描述表与打印设备相关等等。
屏幕设备描述表,一般我们简单地称其为设备描述表。它与显示设备具有一定的对应关系,在windows GDI界面下,它总是相关与某个窗口或这窗口上的某个显示区域。通常意义上窗口的设备描述表,一般指的是窗口的客户区,不包括标题栏、菜单栏所占有的区域,而对于整个窗口来说,其设备描述表严格意义上来讲应该称为窗口设备描述表,它包含窗口的全部显示区域。二者的操作方法完全一致,所不同的仅仅是可操作的范围不同而已。
windows 窗口一旦创建,它就自动地产生了与之相对应的设备描述表数据结构,用户可运用该结构,实现对窗口显示区域的GDI操作,如划线、写文本、绘制位图、填充等,并且所有这些操作均要通过设备描述表句柄了进行。
设备描述表是一种数据结构,它包括了一个设备(如显示器和打印机)的绘制属性相关的信息。所有的绘制操作通过设备描述表进行。设备描述表与大多WIN32结构不同,应用程序不能直接访问设备描述表,只能由各种相关API函数通过设备描述表的句柄间接访问该结构。
设备描述表总是与某种系统硬件设备相关 。比如屏幕设备描述表与显示设备相关,打印机设备描述表与打印设备相关等等。
屏幕设备描述表,一般我们简单地称其为设备描述表。它与显示设备具有一定的对应关系,在windows GDI界面下,它总是相关与某个窗口或这窗口上的某个显示区域。通常意义上窗口的设备描述表,一般指的是窗口的客户区,不包括标题栏、菜单栏所占有的区域,而对于整个窗口来说,其设备描述表严格意义上来讲应该称为窗口设备描述表,它包含窗口的全部显示区域。二者的操作方法完全一致,所不同的仅仅是可操作的范围不同而已。
windows 窗口一旦创建,它就自动地产生了与之相对应的设备描述表数据结构,用户可运用该结构,实现对窗口显示区域的GDI操作,如划线、写文本、绘制位图、填充等,并且所有这些操作均要通过设备描述表句柄了进行。
1、 HDC hdc;
hdc
=::
GetDC
(
m_hWnd
);
::
ReleaseDC
(
m_hWnd
,
hdc
);
2、 CDC *pDC=GetDC();
ReleaseDC
(
pDC
);
//需要释放设备描述表
4、CWindowDC dc(this);
CPen
CPen(
int
nPenStyle
,
int
nWidth
,
COLORREF
crColor
);
在程序中,构造一个GDI对象后,该对象并不会立即生效,必须选入设备描述表中,它才会在以后的绘制操作中生效。
CPen*
SelectObject(
CPen*
pPen
); //该函数返回一个先前被选对象的指针。
不能在
OnCtlColor里面设置字体,会造成闪烁现象。字体设置放在初始化中即可
使用位图画刷
CBrush::CBrush
CBrush( );
CBrush( COLORREF crColor );//创建一个颜色画刷
throw( CResourceException );
CBrush( int nIndex, COLORREF crColor );
throw( CResourceException );
CBrush( CBitmap* pBitmap );//创建一个位图画刷
throw( CResourceException );
创建位图对象时,要调用初始化函数LoadBitmap
透明画刷
HGDIOBJ GetStockObject(int
);
利用GetStockObject函数获取一个黑色或白色的画刷句柄
NULL_BRUSH.
static
CDC*
PASCAL
FromHandle(
HDC
hDC
);//从画刷句柄转换为画刷对象.
CBrush
*
brush
=
CBrush
::
FromHandle
((
HBRUSH
)
GetStockObject
(
NULL_BRUSH
));
创建一个指定的画刷:
CBrush::CreateSolidBrush
BOOL CreateSolidBrush( COLORREF crColor );
创建画刷即创建了GDI资源,需要释放GDI资源,否则会造成内存泄漏。
DeleteObject(m_hTextBrush);