C#中的onpaint函数怎么用的
onpaint函数和paint时间到底是怎么一个触发关系,重现后的onpaint又是如何调用的,最好能够用代码演示一下,理论不明白的。回答好的我追一百分,不缺分。...
onpaint函数和paint时间到底是怎么一个触发关系,重现后的onpaint又是如何调用的,最好能够用代码演示一下,理论不明白的。回答好的我追一百分,不缺分。
展开
1个回答
展开全部
不用代码演示,原理很简单的。
System.Windows.Forms.Form类中有一个Invalidate()方法成员,它把客户窗口区域标记为无效,并保引发Paint事件。
Invalidate()有几个重载方法,可以给它传送一个矩形参数(Rectangle类型),指定(使用页面坐标)需要重新绘制的窗口区域;如果不提供它任何参数,就把整个客户区域标记为无效;如果绘制区域不是矩形,可以向它传递区域参数(Region类型),Region和Rectangle不同是可以对多个Region做交并差操作,生成复杂的无效区域。
在编程中,根据需要绘图的区域,首先生成这块区域的对象,以该对象作为参数调用Invalidate()方法,就可以引发Paint事件了,这块区域在Paint看来就变成无效区域了。至于绘图是Paint事件处理干的事。
对Paint事件编程,首先根据Paint事件参数获取无效区域,然后在无效区域中按要求绘制就可以了。
System.Windows.Forms.Form类中有一个Invalidate()方法成员,它把客户窗口区域标记为无效,并保引发Paint事件。
Invalidate()有几个重载方法,可以给它传送一个矩形参数(Rectangle类型),指定(使用页面坐标)需要重新绘制的窗口区域;如果不提供它任何参数,就把整个客户区域标记为无效;如果绘制区域不是矩形,可以向它传递区域参数(Region类型),Region和Rectangle不同是可以对多个Region做交并差操作,生成复杂的无效区域。
在编程中,根据需要绘图的区域,首先生成这块区域的对象,以该对象作为参数调用Invalidate()方法,就可以引发Paint事件了,这块区域在Paint看来就变成无效区域了。至于绘图是Paint事件处理干的事。
对Paint事件编程,首先根据Paint事件参数获取无效区域,然后在无效区域中按要求绘制就可以了。
追问
客户矿口区域标记无效是什么意思,还有就是paint函数和form_paint是什么关系,paint重载后又是怎么调用的
追答
无效区域是整个图形的一个部分,一般来说不可能对整个图形进行绘制,而是绘制其中的一部分,当前绘制的这个部分就被设置成无效区域,告诉C#当前的绘图区域,也就是局部绘制的意思啦。这样做的好处是提高图形运算的效率,像大图在视窗中的滚动、拖放就应用到了局部绘制技术的例子。
上面说的事件对于窗体来说就是Form_Paint事件。
在C#中,调用Invalidate()或出现需要重新绘制的信息时(比如上层窗口被移动,底层窗口需要重画),首先调用OnPaint虚拟方法(C#中的窗体类和控件类都重载了OnPaint虚拟方法的),你可以在重载OnPaint虚拟方法并在方法内部编写绘图代码;然后引发Paint事件,你也可以在Paint事件中编写绘图代码。你自行决定将绘图代码编写在何处。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询