mfc中,updatewindow函数感觉没什么用啊

我不懂。据说这个函数能发出重绘消息。于是我把这个函数删了,可改变窗口大小的时候,不还是能发送重绘消息调用onpaint来重绘?这个函数纠结是干什么用的?还有,我不明白,第... 我不懂。据说这个函数能发出重绘消息。于是我把这个函数删了,可改变窗口大小的时候,不还是能发送重绘消息调用onpaint来重绘?

这个函数纠结是干什么用的?

还有,我不明白,第一次wm_paint消息究竟是从哪里发出的?(注意就是运行程序后,没有什么改变大小遮挡之类)

从调用create函数后发出?但create函数发出的是wm_create消息,响应的是oncreate函数

从调用showwindow发出?网上查了一下似乎又不是。

从UpdateWindow()后发出?删掉这个函数不仅创建窗口后能马上onpaint,改变大小等更新也照样onpaint
展开
 我来答
金色潜鸟
2013-12-02 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5701万
展开全部
是的。视窗程序是这样的。某些情况下它也许工作,也许不工作。

你需要采用别的措施。例如:

这是我在 API 程序里采取的措施,让窗hide 一下,立即 show:
ShowWindow(hwnd, SW_HIDE);
ShowWindow(hwnd, SW_SHOW);
就重画了。

这是我在 分裂窗 里 从 对话窗 用 Invalidate(TRUE); 向 右上方 那个 窗 发命令 更新:
void CRightBotView::OnButton1()
{
。。。
CRightTopView *view_tp;
view_tp = (CRightTopView*)MainFrame->m_wndSplitterRight.GetPane(0,0);
view_tp->Invalidate(TRUE);
}
更多追问追答
追问
其实就是创建窗口后,系统自动判断其为无效区,然后发出WM_PAINT消息来刷一遍,让其成为有效,是这样么?
追答
视窗程序是事件驱动消息循环程序。
创建窗口只执行一次。靠它发消息,只可能给你执行一次。
其它事件,例如 按 鼠标键,改窗的大小,其它窗口覆盖,本窗弹上,窗内容更新 都会发出 WM_PAINT。
Invalidate(TRUE); 是说,原来的窗口属性过时了,需更新。
sunny紫色天际
2013-12-02
知道答主
回答量:36
采纳率:0%
帮助的人:25.5万
展开全部
一旦窗口有了无效区,就会产生WM_PAINT消息

例如,你用另一个窗口,遮挡一下当前窗口,那么在你把上面的窗口移动走的时候,原来被遮挡的位置为无效,窗口就会响应WM_PAINT消息来重绘。如果你在注册窗口类的时候使用了CS_HREDRAW (CS_VREDRAW),那么在窗口的宽度(高度)改变时也会出现WM_PAINT
更多追问追答
追问
都说只是点击运行窗口,其他没有任何操作了。。WM_PAINT呢?
追答
哦,这个意思

其实,在ShowWindow函数执行后,一小段时间,系统就会自动给窗口传递WM_PAINT
。一般人们的习惯是在ShowWindow执行后立即执行UpdateWindow,这样,窗口显示之后立刻重绘。两种做法有区别,具体内容但我忘了。有一套视频,是中科院杨力祥的《高级Windows程序设计》,里面提到过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式