MFC窗口重绘后,再输出不显示
我最近在看孙新的教程MFC教程,看到菜单那一章,遇到个小问题:我想要在框架类的OnCommand消息响应函数中先重绘窗口把上次的输出删除,再在视类窗口中用TextOut输...
我最近在看孙新的教程MFC教程,看到菜单那一章,遇到个小问题:
我想要在框架类的OnCommand消息响应函数中先重绘窗口把上次的输出删除,再在视类窗口中用TextOut输出新内容,如下:
pView->UpdateWindow();
CClientDC dc(pView);
dc.TextOut(...);
......
结果貌似没发生重绘,这次的输出显示仍是在上次输出显示上的覆盖,求解答!!
多谢~
是孙鑫的教程,写错了,更正下 展开
我想要在框架类的OnCommand消息响应函数中先重绘窗口把上次的输出删除,再在视类窗口中用TextOut输出新内容,如下:
pView->UpdateWindow();
CClientDC dc(pView);
dc.TextOut(...);
......
结果貌似没发生重绘,这次的输出显示仍是在上次输出显示上的覆盖,求解答!!
多谢~
是孙鑫的教程,写错了,更正下 展开
2个回答
展开全部
首先你代码应该源宏写的有点问题。衡裤因为看不到你代码
教你一种方法,自己咐裂简手动覆盖呀,
pView->UpdateWindow();
CClientDC dc(pView);
CRect rect;
GetClientRect(rect);
dc.FillSolidRect(recrt, RGB(255,255,255));
dc.TextOut(...);
教你一种方法,自己咐裂简手动覆盖呀,
pView->UpdateWindow();
CClientDC dc(pView);
CRect rect;
GetClientRect(rect);
dc.FillSolidRect(recrt, RGB(255,255,255));
dc.TextOut(...);
更多追问追答
追问
这办法不错!能解决我的问题~
可还是不知道,为什么 pView->UpdateWindow(); 不起作用啊?
我换成 pView->Invalidate(); 后效果是没有显示,原因大概是消息队列里被丢进了WM_PAINT消息,而它的优先级较低,在TextOut()后才被调用吧?
PS 我两句都加上,运行正确了:
pView->Invalidate();
pView->UpdateWindow();
......
求解释!多谢!~
追答
我去,怪不得,原来你没有刷新
pView->Invalidate(); //整个区域无效
pView->UpdateWindow(); //使WM_PAINT立即被执行,也就是窗口立即重绘。
Invalidate();消息WM_PAINT优先级比较低通过UpdateWindow(); 可以立即被执行
Invalidate会指定重绘制区域,你没有调用Invalidate();也就没有WM_PAINT消息,当然不会重绘了。
展开全部
应该是你建立工程错陆清了。
基于标岩配准CView类继承的早枣前话,TextOut默认输出是覆盖的
你试试创建工程的时候,View类从CRichEditView类继承。
基于标岩配准CView类继承的早枣前话,TextOut默认输出是覆盖的
你试试创建工程的时候,View类从CRichEditView类继承。
更多追问追答
追问
应该不是建工程的问题 : )
追答
不好意思,看错了你的问题,以为你不希望覆盖呢,呵呵。
pView->InvalidateRect(NULL);
CClientDC dc(pView);
dc.TextOut(...);
你这样试试,UpdateWindow不应该用在 View类,CWnd标准函数,在View里面好像被覆盖了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询