C#中,在窗口绘图的时候,添加了一个picturebox,将导入的图片覆盖整个窗口作为背景,然后在
C#中,在窗口绘图的时候,添加了一个picturebox,将导入的图片覆盖整个窗口作为背景,然后在背景的基础上绘制线段,为什么我用g.graphic=e.graphic;...
C#中,在窗口绘图的时候,添加了一个picturebox,将导入的图片覆盖整个窗口作为背景,然后在背景的基础上绘制线段,为什么我用g.graphic=e.graphic;可以画出来,但是用 g.graphic=creatgraphic();就不行了,怎么解决啊?
展开
1个回答
展开全部
绘图方法当然要在给定的上下文上绘制,你自己创建的Graphics设备当然不行了。
这是“回调函数”的原理。就是说你的绘制方法是给系统调用的,而不是自己调用的。
你按系统要求的标准写一个绘图方法,当系统认为需要重绘一个窗口了(比如刚刚显示,或是被其他窗口遮到又露出了),这时就会调用你写的那个OnPaint方法,把屏幕里那个窗口绘制区与一个绘图设备(Graphics,如同画布)上下文关联起来,然后把这个Graphics做为参数给你(e.Graphics),说:请在这个图形设备上绘制吧!于是你的方法开始在这个画布上画。画好了系统把这个绘出来的内容显示在屏幕上。
如果你自己创建一个自己的Graphics设备,这个设备并不是系统给你的那个,当然不会被显示出来了。你当然可以自己创建一个绘图设备来绘制,但你不把你自己的这个Graphics复制到系统递给你的那个设备(e.graphics)上的话,当然是不会显示的。
怎么解决?用e.Graphics来绘图呗!
但我感觉你可能有别的问题。你为什么非要自己搞Graphics?
这是“回调函数”的原理。就是说你的绘制方法是给系统调用的,而不是自己调用的。
你按系统要求的标准写一个绘图方法,当系统认为需要重绘一个窗口了(比如刚刚显示,或是被其他窗口遮到又露出了),这时就会调用你写的那个OnPaint方法,把屏幕里那个窗口绘制区与一个绘图设备(Graphics,如同画布)上下文关联起来,然后把这个Graphics做为参数给你(e.Graphics),说:请在这个图形设备上绘制吧!于是你的方法开始在这个画布上画。画好了系统把这个绘出来的内容显示在屏幕上。
如果你自己创建一个自己的Graphics设备,这个设备并不是系统给你的那个,当然不会被显示出来了。你当然可以自己创建一个绘图设备来绘制,但你不把你自己的这个Graphics复制到系统递给你的那个设备(e.graphics)上的话,当然是不会显示的。
怎么解决?用e.Graphics来绘图呗!
但我感觉你可能有别的问题。你为什么非要自己搞Graphics?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询