首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

求讲授 InvalidateRect

2012-12-14 
求讲解 InvalidateRect求讲解InvalidateRect该函数是怎么刷新的,调用OnPaint了?如果我在OnPaint里调用了自

求讲解 InvalidateRect
求讲解InvalidateRect
该函数是怎么刷新的,调用OnPaint了?
如果我在OnPaint里调用了自己的Paint函数,是不是InvalidateRect会调用我的函数?还是他只会重画参数Rect指定的区域?
BOOL bErase 这个参数有什么作用,会产生什么不同的效果?
求讲解

附百科

该函数向指定的窗体添加一个矩形,然后窗口客户区域的这一部分将被重新绘制。   BOOL InvalidateRect(   HWND hWnd, // handle of window with changed update region   CONST RECT *lpRect, // address of rectangle coordinates   BOOL bErase // erase-background flag   );   参数:   hWnd:要更新的客户区所在的窗体的句柄。如果为NULL,则系统将在函数返回前重新绘制所有的窗口, 然后发送 WM_ERASEBKGND 和 WM_NCPAINT 给窗口过程处理函数。   lpRect:无效区域的矩形代表,它是一个结构体指针,存放着矩形的大小。如果为NULL,全部的窗口客户区域将被增加到更新区域中。   bErase:指出无效矩形被标记为有效后,是否重画该区域,重画时用预先定义好的画刷。当指定TRUE时需要重画。   返回值:   函数成功则返回非零值,否则返回零值。   说明:被标记为无效矩形的区域直到WM_PAINT消息被处理完之后才会消失,或者使用ValidateRect(),ValidateRgn()函数来使之有效。当应用程序的消息队列中为空时,并且窗体要更新的区域非空时,系统会发送一个WM_PAINT消息到窗体。 
[最优解释]
InvalidateRect(hWnd,&rect,TRUE);向hWnd窗体发出WM_PAINT的消息,
强制客户区域重绘制,
1、会触发OnPaint事件的
2、只绘画制定的区域



[其他解释]


//---------------------------------------
/*
做个测试代码给你 ,你就知道了
单击Button2 Form上会显示数字
点击Button1 Form被绘画的区域的数字消失,未绘画部分依然存在
*/
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TRect  Rectq ;
  Rectq = Rect(1,1,300,300);
  InvalidateRect(Form1->Handle,&Rectq,true);
}
//---------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  HDC DC=GetDC(Form1->Handle);
  for(int i=0;i<100;i++)
  {
      String s=i;
      TextOut(DC,30,30,s.c_str(),s.Length());
      TextOut(DC,300,30,s.c_str(),s.Length());
  }
  ReleaseDC(Form1->Handle,DC);
}
//---------------------------------------


[其他解释]
非常感谢


引用:
InvalidateRect(hWnd,&amp;rect,TRUE);向hWnd窗体发出WM_PAINT的消息,
强制客户区域重绘制,
1、会触发OnPaint事件的
2、只绘画制定的区域

[其他解释]
该回复于2010-12-03 11:00:53被版主删除

热点排行