BeginPaint和EndPaint函数
说明:
BeginPaint:函数为指定窗口进行绘图工作的准备,并用将和绘图有关的信息填充到PAINTSTRUCT结构中。
EndPaint:和BeginPaint成对出现,描画完成释放。
BeginPaint 函数的作用是告诉 Windows 系统,要开始向显示卡输出内容了,把这次显示的操作请求放到系统显示队列里。由于系统上的显示卡往往只有一个,那么这种资源是独占的,所以操作系统会让显示操作线性化,保证每个窗口的显示是独立进行的,而不是 A 窗口显示一部份,或者 B 窗口显示一部份,而是 A 窗口显示完成后再让 B 窗口显示。因此, BeginPaint 函数就是跟操作系统说,我需要显示了,你安排好吧。当 BeginPaint 返回时,就获取到系统的显示资源句柄,这样就可以调 GDI 一大堆函数来操作了。显示完成后,一定要记得调用函数 EndPaint ,因为使用 BeginPaint 函数请求了独占的显示资源后,如果不释放回去,就会让其它程序永远获取不到显示资源了,这样系统就死锁了。
函数声明:
HDC BeginPaint(
HWND hWnd,
LPPAINTSTRUCT lpPaint
);
BOOL EndPaint(
HWND hWnd,
const PAINTSTRUCT *lpPaint
);
参数:
hWnd :[in]被重绘的窗口句柄。
lpPaint :[out]指向一个用来接收绘画信息的PAINTSTRUCT结构,结构体定义如下:
typedef struct tagPAINTSTRUCT {
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT;
【hdc】 是获取设备句柄。
【fErase】 是否擦新背景。
【rcPaint】 是显示的窗口大小。
【fRestore 、 fIncUpdate 、