MFC窗口重绘后,再输出不显示

我最近在看孙新的教程MFC教程,看到菜单那一章,遇到个小问题:我想要在框架类的OnCommand消息响应函数中先重绘窗口把上次的输出删除,再在视类窗口中用TextOut输... 我最近在看孙新的教程MFC教程,看到菜单那一章,遇到个小问题:
我想要在框架类的OnCommand消息响应函数中先重绘窗口把上次的输出删除,再在视类窗口中用TextOut输出新内容,如下:
pView->UpdateWindow();
CClientDC dc(pView);
dc.TextOut(...);
......

结果貌似没发生重绘,这次的输出显示仍是在上次输出显示上的覆盖,求解答!!
多谢~
是孙鑫的教程,写错了,更正下
展开
 我来答
百度网友9de5b9a
2012-07-17 · TA获得超过894个赞
知道小有建树答主
回答量:361
采纳率:0%
帮助的人:457万
展开全部
首先你代码应该源宏写的有点问题。衡裤因为看不到你代码
教你一种方法,自己咐裂简手动覆盖呀,
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消息,当然不会重绘了。
bhtzu
2012-07-17 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4194万
展开全部
应该是你建立工程错陆清了。
基于标岩配准CView类继承的早枣前话,TextOut默认输出是覆盖的
你试试创建工程的时候,View类从CRichEditView类继承。
更多追问追答
追问
应该不是建工程的问题 : )
追答
不好意思,看错了你的问题,以为你不希望覆盖呢,呵呵。
pView->InvalidateRect(NULL);
CClientDC dc(pView);
dc.TextOut(...);
你这样试试,UpdateWindow不应该用在 View类,CWnd标准函数,在View里面好像被覆盖了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式