InvalidateRect,ValidateRect,WM_PAINT消息
2013-09-06 20:44
274 查看
关于InvalidateRect和ValidateRect函数,一直都不是很清楚。。。
今天写了几行代码,来验证一下心里所想的。。。
InvalidateRect函数使&rect标示的矩形区域无效,并且产生一个WM_paint消息,而ValidateRect函数则是rect标示的矩形有效,不会产生wm_paint消息,而会使当前的绘制操作立即生效(个人理解)
如代码所示,在wm_paint消息中输出一行字符“renjingwei”,当按下鼠标左键时,会绘制一个折线,
在wm_lbuttondown消息中,使用了Validate函数,使得整个客户区有效,使当前的绘制操作立即生效,而调用InvalidateRect函数则不会产生折线,因为这个invalidaterect函数会产生WM_PAINT消息,这样只会输出一个文本“renjingwei”
例子的基础上有增加了WM_RBUTTONDOWN消息,在这个消息中绘制一条竖线,如果调用ValidateRect函数会和上边一样,立即生效。。绘制一个L
但是如果调用InvalidateRect(hwnd,NULL,FALSE);
第三个参数FALSE,指示产生WM_PAINT消息后不擦除背景,绘制一个L加一个竖线,
但是调用InvalidateRect(hwnd,NULL,TRUE);
TRUE参数指示产生WM_PAINT消息后擦除背景,会把LBUTTONDOWN消息产生的L给擦除,而且当前绘制的竖线也不会生效,仅仅绘制一行文本,“renjingwei”;
今天写了几行代码,来验证一下心里所想的。。。
InvalidateRect函数使&rect标示的矩形区域无效,并且产生一个WM_paint消息,而ValidateRect函数则是rect标示的矩形有效,不会产生wm_paint消息,而会使当前的绘制操作立即生效(个人理解)
如代码所示,在wm_paint消息中输出一行字符“renjingwei”,当按下鼠标左键时,会绘制一个折线,
在wm_lbuttondown消息中,使用了Validate函数,使得整个客户区有效,使当前的绘制操作立即生效,而调用InvalidateRect函数则不会产生折线,因为这个invalidaterect函数会产生WM_PAINT消息,这样只会输出一个文本“renjingwei”
case WM_PAINT: hdc=BeginPaint(hwnd,&ps); RECT rect; GetClientRect(hwnd,&rect); //TextOut(hdc,200,300,"renjingwei",strlen("renjingwei")); DrawText(hdc,"renjingwei",-1,&rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE); EndPaint(hwnd,&ps); break; case WM_LBUTTONDOWN: hdc=GetDC(hwnd); MoveToEx(hdc,50,50,&pt); LineTo(hdc,50,100); LineTo(hdc,100,100); ValidateRect(hwnd,NULL); ReleaseDC(hwnd,hdc); break; case WM_RBUTTONDOWN: hdc=GetDC(hwnd); MoveToEx(hdc,100,100,&pt); LineTo(hdc,100,200); InvalidateRect(hwnd,NULL,FALSE); //ValidateRect(hwnd,NULL); ReleaseDC(hwnd,hdc); break; 在上边
例子的基础上有增加了WM_RBUTTONDOWN消息,在这个消息中绘制一条竖线,如果调用ValidateRect函数会和上边一样,立即生效。。绘制一个L
但是如果调用InvalidateRect(hwnd,NULL,FALSE);
第三个参数FALSE,指示产生WM_PAINT消息后不擦除背景,绘制一个L加一个竖线,
但是调用InvalidateRect(hwnd,NULL,TRUE);
TRUE参数指示产生WM_PAINT消息后擦除背景,会把LBUTTONDOWN消息产生的L给擦除,而且当前绘制的竖线也不会生效,仅仅绘制一行文本,“renjingwei”;
相关文章推荐
- WM_PAINT消息详解,使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息(WIN7里有变化,“调整视觉效果”,将“启用桌面组合”去掉)
- InvalidateRect 和validateRect 和wm_paint
- WM_PAINT消息---InvalidateRect不能实时更新问题
- 0.VC(ui)-InvalidateRect 和validateRect 和wm_paint
- 深度分析WM_PAINT和WM_ERASEBKGND消息
- InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效
- WM_PAINT消息解析
- WM_PAINT 和 WM_ERASEBKGND 消息的区别 .
- 窗口过程会收到WM_PAINT消息的几种情况
- WM_PAINT消息在窗口重绘的时候产生,那什么时候窗口会重绘(异步工作方式,效率更高,灵活性更强)
- WM_PAINT消息
- SDK编程中有效区域与无效区域的盲区WM_PAINT消息何时发送的。。。
- WM_PAINT消息小结
- 窗体的Alpha通道透明色支持(一旦 Form 被定义为利用 LayeredWindow ,窗口的绘图不再响应沿用多年的 WM_Paint 消息)
- 深度分析WM_PAINT和WM_ERASEBKGND消息
- windows程序设计(2):WM_PAINT消息详解
- 关于WM_Paint 消息解析
- 关于WM_PAINT消息
- WM_PAINT 消息详解
- CClientDC、CPaintDC、CWindowDC类、WM_PAINT消息