关于c#里GDI+绘图问题
在pictureBox的mouseMove事件里通过CreateGraphics绘图无效,但是换成用bitmap,然后pic.Image=bmp就是正常的,我在测试项目里...
在pictureBox的mouseMove事件里通过CreateGraphics绘图无效,但是换成用bitmap,然后pic.Image=bmp就是正常的,我在测试项目里是都可以的,但是在我们软件里就有这样的问题,不知道有没有人跟我一样的?
展开
展开全部
即使可以这么做 这种做法也是不符合逻辑 不便于维护的
首先记住 屏幕是没有记性的
你通过改变窗体大小 使得控件的客户区域暴漏大小改变 会触发控件的重绘事件 它是走paint的
你在其他代码里画过的东西 程序在重绘的时候根本调用不到
举个最简单的例子 假设你在mousemove里画成功了
把窗体最小化-最大化一下 你画的东西就没了
这就是基于GDI绘图的控件刷新原理
所以正确的做法 你触发了click或者mousemove事件 需要改变一些类内部的状态变量 然后调用invalidate重绘控件 而绘图代码应该正确的写在paint里
首先记住 屏幕是没有记性的
你通过改变窗体大小 使得控件的客户区域暴漏大小改变 会触发控件的重绘事件 它是走paint的
你在其他代码里画过的东西 程序在重绘的时候根本调用不到
举个最简单的例子 假设你在mousemove里画成功了
把窗体最小化-最大化一下 你画的东西就没了
这就是基于GDI绘图的控件刷新原理
所以正确的做法 你触发了click或者mousemove事件 需要改变一些类内部的状态变量 然后调用invalidate重绘控件 而绘图代码应该正确的写在paint里
展开全部
这个道理很简单,CreateGraphics()函数创建的Graphics对象是一次性的,每次执行这个代码,控件都会刷新一下创建一个临时Graphics对象,这个对象画出的图下一次刷新时候就没有了,由于MouseMove触发频率极高,导致它作出的图转瞬即逝,也就是绘图无效的效果了。
正确的做法是在Paint里画图,非要用CreateGraphics,就不要放在MouseMove事件里反复触发。
正确的做法是在Paint里画图,非要用CreateGraphics,就不要放在MouseMove事件里反复触发。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
mouseMove里要做的是记下要画的东西,
绘图要在paint里做
绘图要在paint里做
追问
这个不一定的呀,绘图不是只能在paint里画的,就像你点击按钮还不是直接在click里直接绘图的呢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询