SDI应用程序中,关于OnInitailUpdate()与OnDraw()的疑问

tzeyoung 2013-09-29 03:07:13
VS2010环境下,在OnInitialUpdate()和OnDraw()函数中各插入一条MessageBox("OnInitialUpdate")与MessageBox("OnDraw")语句。如下图所示:

调试运行,发现先弹出的是
而后再弹出
请问这是为什么呢?
...全文
168 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-11-04
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
tzeyoung 2013-10-04
  • 打赏
  • 举报
回复
是的,有个资源在我OnInitialUpdate()函数中初始化,然后再在OnDraw()函数中利用,程序失败。但是如果把初始化语句放在OnCreate()函数中,则程序顺利运行。而上述的差异在VC++6.0中是不存在的。
hurryboylqs 2013-10-03
  • 打赏
  • 举报
回复
其实如果是我写程序的话,我根本不怎么关系谁第一谁第二,你可以加个变量保证数据初始化好再执行OnDraw的逻辑就行,谁先谁后其实不是太大问题。
tzeyoung 2013-10-02
  • 打赏
  • 举报
回复
在OnCreate()中加SetRedraw(FALSE)后依然不行
hurryboylqs 2013-10-02
  • 打赏
  • 举报
回复
首先你找到OnInitialUpdate是在哪里调用的,OnInitialUpdate应该是OnCreate之后调用的,OnCreate的时候可能会发出WM_PAINT动作,可以在OnCreate里SetRedraw(FALSE)试试
tzeyoung 2013-10-02
  • 打赏
  • 举报
回复
我原本也觉得应当先弹出OnInitialUpdate,后弹出OnDraw.但无意中发现在VS2010中运行的结果是先OnDraw,后OnInitialUpdate,而在VC++6.0中运行的结果符合先OnInitialUpdate,后OnDraw.你可以试试,两者编译器有区别,求原因.
boylafong 2013-09-29
  • 打赏
  • 举报
回复
会先弹出OnInitialUpdate吧

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧