MFC界面刷新问题
onPaint为消息响应函数,里面创建内存DC作图,一个函数为画坐标及网格线的,另一个函数为画动态曲线的。问题是,在停止作图时,由于onPaint自动刷新,在网格线上的曲...
onPaint为消息响应函数,里面创建内存DC作图,一个函数为画坐标及网格线的,另一个函数为画动态曲线的。问题是,在停止作图时,由于onPaint自动刷新,在网格线上的曲线被刷没了。试着把响应去掉,自己调用onPaint,不知怎么地在画图的控件中有一小块变黑了,其他地方都正常画出了图像 ,黑块的地方像是在刷新,但那个地方没有别的东西,怎么就变黑了一块(整个窗口背景色是黑色的)。求高人解答!如何解决停止作图时的自动刷新,另外,如果取消响应的话,那一小块没做出图的地方(变黑的地方)是怎么回事?
展开
2个回答
2011-11-08
展开全部
onPaint函数是MFC在相应WM_PAINT消息时自动调用的,在这个函数里面加入你的绘图逻辑就可以了,不要自己去调用onPaint
追问
问题是,添加响应,停止作图时画出来的曲线就没了,只剩下网格线了。onPaint我把他放在onTimer()里执行的,画曲线的值等一些变量也是放在这里控制。如果去掉onTimer里的onPaint,让它随消息响应作图,画曲线时变化是一段一段的,所以还得自己控制。现在想解决的就是在停止作图时,如何不让这个消息响应?还有,当我去掉响应时(当做自定义的onPaint),那一小块黑是怎么回事?求解!
追答
别自己调用onpaint
如果你想使用onpaint可以使用Invalidate这类的函数重刷画面
把你的画图都放到onpaint中
不让这个消息响应这个不是很现实,因为onpaint不仅仅被你的timer调用,在很多时候会被系统调用,比如窗口被遮挡这类的
展开全部
onPaint不需要在onTimer里弄。它是自动调用的,你可以这样。
重写onPaint,在里面加一个全局bool变量,比如:
void xxxx::onPaint()
{
if (m_bDraw)
{
/*你要画的东东*/
}
/*xxx是xxxx的父类*/
xxx::onPaint();
}
不过好像要使背景不刷新,还要重写WM_ERASEBKGND消息响应的函数。我也好久没搞MFC了,可以去查查这个消息的资料
重写onPaint,在里面加一个全局bool变量,比如:
void xxxx::onPaint()
{
if (m_bDraw)
{
/*你要画的东东*/
}
/*xxx是xxxx的父类*/
xxx::onPaint();
}
不过好像要使背景不刷新,还要重写WM_ERASEBKGND消息响应的函数。我也好久没搞MFC了,可以去查查这个消息的资料
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询