BeginPaint EndPaint 与GetDC ReleaseDC的区别
2014-09-26 08:15
411 查看
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消息里面输入如下代码:
[cpp] view
plaincopy
HDC hdc = GetDC(hWnd);
Ellipse(ps.hdc, 10, 10, 20, 20);
ReleaseDC(hWnd, hdc);
运行程序可以清楚的看到,圆在不停的闪烁,
如果替换成BeginPaint 则不会闪烁
原因是: GetDC不会把无效区域变为有效区域,所以不停的发送消息自绘,从而导致闪烁,BeginPaint 反之
转自:http://blog.csdn.net/acdnjjjdjkdckjj/article/details/5967532
绘图一般在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消息里面输入如下代码:
[cpp] view
plaincopy
HDC hdc = GetDC(hWnd);
Ellipse(ps.hdc, 10, 10, 20, 20);
ReleaseDC(hWnd, hdc);
运行程序可以清楚的看到,圆在不停的闪烁,
如果替换成BeginPaint 则不会闪烁
原因是: GetDC不会把无效区域变为有效区域,所以不停的发送消息自绘,从而导致闪烁,BeginPaint 反之
转自:http://blog.csdn.net/acdnjjjdjkdckjj/article/details/5967532
相关文章推荐
- BeginPaint EndPaint 与GetDC ReleaseDC的区别
- BeginPaint/EndPaint(CPaintDC)与GetDC(CClientDC)的区别
- BeginPaint/EndPaint(CPaintDC)与GetDC(CClientDC)的区别
- BeginPaint&&GetDc区别
- BeginPaint&&GetDc
- **c++ stl 顺序容器: begin(),end()和front(),back()区别和使用**
- 双缓存之BeginPaint&GetDC
- STL front() ,back()和begin(),end()区别
- C++ STL begin()和front()、end()和back()的区别与用法
- C++ STL begin()和front()、end()和back()的区别与用法
- 顺序容器的begin,front,end,back的区别
- MFC程序设计中的BeginPaint/EndPaint和GetDC/ReleaseDC的使用
- rbegin 和 end 区别
- sort函数、vector中begin()、end()和front()、back()的区别
- SQL SERVER2000教程-第五章 处理数据 第十八节 用BEGIN…END语句进行数据统计
- paint()方法与paintComponent()方法的区别
- sql server 2005 T-SQL BEGIN...END (Transact-SQL)
- Begin...end
- JFC 中绘制方法 paint(Graphics g) 和 paintComponent(Graphics g) 的区别(转)
- Ajax begin end小例子