关于c#里GDI+绘图问题

在pictureBox的mouseMove事件里通过CreateGraphics绘图无效,但是换成用bitmap,然后pic.Image=bmp就是正常的,我在测试项目里... 在pictureBox的mouseMove事件里通过CreateGraphics绘图无效,但是换成用bitmap,然后pic.Image=bmp就是正常的,我在测试项目里是都可以的,但是在我们软件里就有这样的问题,不知道有没有人跟我一样的? 展开
 我来答
百度网友cfe4d0f
2013-04-10 · TA获得超过1502个赞
知道小有建树答主
回答量:937
采纳率:100%
帮助的人:859万
展开全部
即使可以这么做 这种做法也是不符合逻辑 不便于维护的

首先记住 屏幕是没有记性的
你通过改变窗体大小 使得控件的客户区域暴漏大小改变 会触发控件的重绘事件 它是走paint的
你在其他代码里画过的东西 程序在重绘的时候根本调用不到

举个最简单的例子 假设你在mousemove里画成功了
把窗体最小化-最大化一下 你画的东西就没了

这就是基于GDI绘图的控件刷新原理

所以正确的做法 你触发了click或者mousemove事件 需要改变一些类内部的状态变量 然后调用invalidate重绘控件 而绘图代码应该正确的写在paint里
百度网友d242235
2013-04-10 · TA获得超过2385个赞
知道大有可为答主
回答量:1403
采纳率:84%
帮助的人:813万
展开全部
这个道理很简单,CreateGraphics()函数创建的Graphics对象是一次性的,每次执行这个代码,控件都会刷新一下创建一个临时Graphics对象,这个对象画出的图下一次刷新时候就没有了,由于MouseMove触发频率极高,导致它作出的图转瞬即逝,也就是绘图无效的效果了。
正确的做法是在Paint里画图,非要用CreateGraphics,就不要放在MouseMove事件里反复触发。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a97606d
2013-04-08 · TA获得超过190个赞
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:155万
展开全部
mouseMove里要做的是记下要画的东西,
绘图要在paint里做
追问
这个不一定的呀,绘图不是只能在paint里画的,就像你点击按钮还不是直接在click里直接绘图的呢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式