BeginPaint EndPaint 与GetDC ReleaseDC的区别

1.

   绘图一般在WM_PAINT消息里面绘图, 一般用BeginPaint( HWND hwnd, LPPAINTSTRUCT lpPaint) 与BOOL EndPaint(
  HWND hWnd,     CONST PAINTSTRUCT *lpPaint)  

<1> BeginPaint自动设置裁剪区域,把不更新的区域设置到更新区域外面,

 此消息只绘制无效区域,更新区域可以显示地被InvalidateRect 和InvalidateRgn设置,如果背景要擦除,BeginPaint发送消息 WM_ERASEBKGND 给窗口

 

<2>BeginPaint 会自动地把无效区域设置为有效区域, BeginPaint 和EndPaint 只能在WM_PAINT消息里面进行调用 ,两者一定要成对出现

 

2. GetDC与ReleaseDC

<1> GetDC 可以用在任何需要DC的地方, 他不会使得无效区域变得有效

 

3.解释了那么多,拿个程序来说明问题:

 

比如说要在一个客户区域画个圆 ,如果在WM_PAINT消息里面输入如下代码:

  

 

运行程序可以清楚的看到,圆在不停的闪烁,

如果替换成BeginPaint 则不会闪烁

 

原因是: GetDC不会把无效区域变为有效区域,所以不停的发送消息自绘,从而导致闪烁,BeginPaint 反之

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值