mfc中,updatewindow函数感觉没什么用啊
我不懂。据说这个函数能发出重绘消息。于是我把这个函数删了,可改变窗口大小的时候,不还是能发送重绘消息调用onpaint来重绘?这个函数纠结是干什么用的?还有,我不明白,第...
我不懂。据说这个函数能发出重绘消息。于是我把这个函数删了,可改变窗口大小的时候,不还是能发送重绘消息调用onpaint来重绘?
这个函数纠结是干什么用的?
还有,我不明白,第一次wm_paint消息究竟是从哪里发出的?(注意就是运行程序后,没有什么改变大小遮挡之类)
从调用create函数后发出?但create函数发出的是wm_create消息,响应的是oncreate函数
从调用showwindow发出?网上查了一下似乎又不是。
从UpdateWindow()后发出?删掉这个函数不仅创建窗口后能马上onpaint,改变大小等更新也照样onpaint 展开
这个函数纠结是干什么用的?
还有,我不明白,第一次wm_paint消息究竟是从哪里发出的?(注意就是运行程序后,没有什么改变大小遮挡之类)
从调用create函数后发出?但create函数发出的是wm_create消息,响应的是oncreate函数
从调用showwindow发出?网上查了一下似乎又不是。
从UpdateWindow()后发出?删掉这个函数不仅创建窗口后能马上onpaint,改变大小等更新也照样onpaint 展开
展开全部
是的。视窗程序是这样的。某些情况下它也许工作,也许不工作。
你需要采用别的措施。例如:
这是我在 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);
}
你需要采用别的措施。例如:
这是我在 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); 是说,原来的窗口属性过时了,需更新。
展开全部
一旦窗口有了无效区,就会产生WM_PAINT消息
例如,你用另一个窗口,遮挡一下当前窗口,那么在你把上面的窗口移动走的时候,原来被遮挡的位置为无效,窗口就会响应WM_PAINT消息来重绘。如果你在注册窗口类的时候使用了CS_HREDRAW (CS_VREDRAW),那么在窗口的宽度(高度)改变时也会出现WM_PAINT
例如,你用另一个窗口,遮挡一下当前窗口,那么在你把上面的窗口移动走的时候,原来被遮挡的位置为无效,窗口就会响应WM_PAINT消息来重绘。如果你在注册窗口类的时候使用了CS_HREDRAW (CS_VREDRAW),那么在窗口的宽度(高度)改变时也会出现WM_PAINT
更多追问追答
追问
都说只是点击运行窗口,其他没有任何操作了。。WM_PAINT呢?
追答
哦,这个意思
其实,在ShowWindow函数执行后,一小段时间,系统就会自动给窗口传递WM_PAINT
。一般人们的习惯是在ShowWindow执行后立即执行UpdateWindow,这样,窗口显示之后立刻重绘。两种做法有区别,具体内容但我忘了。有一套视频,是中科院杨力祥的《高级Windows程序设计》,里面提到过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询