导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

子窗口的OnInitDialog多次刷新问题

qq14923349 2010-08-01 09:08:03
问题是这样的
主窗口声明了子窗口对象,并DoModal子窗口,
问题是子窗口里面我有个clistctrl
主窗口用了ONTIME定时增加值给那个CLISTCTRL
但是我发现每次打开子窗口的CLISTCTRL都是空的,所以我怀疑子窗口的OnInitDialog每打开一次把界面都刷空了,值我是肯定加了的,这个情况我该怎么处理?
...全文
412 点赞 收藏 21
写回复
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
datoucaicai 2010-08-17
用非模式对话框实现子窗口

并且子窗口退出时自能是隐藏不能是销毁,这样子窗口可以一直接收主窗口相关数据
除了第一次是创建子窗口外,以后对子窗口的操作:隐藏-显示-隐藏-显示-...
回复
许文君 2010-08-02
表达不好,参考红猪的这句话 你再次DoModal出来的是一个新对话框了。
回复
许文君 2010-08-02
概念性错误。除非你子窗口与主窗口同时创建并且隐藏了。

===========================================================
按我的理解即是你每次都会打开并关闭,那么,你想,OMTIME是一直在执行,你子窗口没创建前和关闭了它发给谁了呢,所以,你的思路有问题。
===========================================================
个人建议:
1,主窗口OnInitDialog时创建子窗口并且隐藏之,调用时显示,子窗口关闭事件得重载,Showwindow隐藏之。
2,主窗口OnTimer事件增加一全局变量,增加其即可。然后判断子窗口是否存在,存在才发
回复
xxd_qd 2010-08-02
[Quote=引用 19 楼 mengfeihong 的回复:]
试了一试,果然ONTIMER仍然在走,看来对消息机制认识存在误区了。
[/Quote]
你的消息处理代码相当于FuncA,里面调用了DoModal相当于FuncB,可DoModal内部就是一个消息环,而你的消息处理代码可以看作是被消息环调用的,也就是说相当于FuncB再次调用FuncA,这怎么会有问题?
回复
蒙飞鸿 2010-08-02
试了一试,果然ONTIMER仍然在走,看来对消息机制认识存在误区了。
回复
蒙飞鸿 2010-08-02
[Quote=引用 5 楼 xxd_qd 的回复:]
引用 2 楼 mengfeihong 的回复:
主窗口跟DOMODAL出来的子窗口,要交互的话一般要用到新线程。否则DOMODAL不返回,主窗口就阻塞在那了,ONTIMER嘛。。。

这个就是彻底的概念错误了。DoModal不返回就叫阻塞?要照这么理解的话,那我写个程序,函数A调用函数B,函数B又调用函数A,那岂不成死锁了?

DoModal本身就是个消息环,因此DoModal不返回不影……
[/Quote]
恩,用“阻塞”这个词不严谨不精确,DOMODAL的上下文卡住了,主窗口和子窗口的消息循环具体怎么样还真没留意过。因为之前写交互代码都是写在DOMODAL外的上下文呢,所以有个印象就是DOMODAL把这段上下文“卡”住了。

话说回来,非多线程的程序,调用DOMODAL的代码被“卡”在那,消息循环就算仍在进行,可是消息处理的代码,还能被调用?
回复
Eleven 2010-08-02
[Quote=引用楼主 qq14923349 的回复:]
问题是这样的
主窗口声明了子窗口对象,并DoModal子窗口,
问题是子窗口里面我有个clistctrl
主窗口用了ONTIME定时增加值给那个CLISTCTRL
但是我发现每次打开子窗口的CLISTCTRL都是空的,所以我怀疑子窗口的OnInitDialog每打开一次把界面都刷空了,值我是肯定加了的,这个情况我该怎么处理?
[/Quote]
使用非模态对话框去做。。。
回复
arong1234 2010-08-02
OnInitDialog对于一个对话框只应该出现一次[Quote=引用楼主 qq14923349 的回复:]
问题是这样的
主窗口声明了子窗口对象,并DoModal子窗口,
问题是子窗口里面我有个clistctrl
主窗口用了ONTIME定时增加值给那个CLISTCTRL
但是我发现每次打开子窗口的CLISTCTRL都是空的,所以我怀疑子窗口的OnInitDialog每打开一次把界面都刷空了,值我是肯定加了的,这个情况我该怎么处理?
[/Quote]
回复
昨夜无风 2010-08-02
这样的问题我都用非模态来处理
回复
LuciferStar 2010-08-02
上次一个程序,OnTimer里,每次都会调用OnInitialDialog初始化某些变量。
比较奇怪。
回复
山伟 2010-08-02
[Quote=引用 11 楼 qq14923349 的回复:]
引用 10 楼 xxd_qd 的回复:
你的对话框一关,各个控件窗口早已被全部销毁,里面的内容当然全没了。

要想保留,那就不能关闭对话框窗口。可以用ShowWindow隐藏,不过这样的话,你就不能用DoModal,因为对话框没关闭之前,DoModal不会返回,所以你必须使用非模态对话框。

非模态对话框啊········
我不DOMODAL
[/Quote]

创建子类对象指针,new后再Create子类窗口,自己添加oncancel函数
子窗口销毁在主窗口关闭时销毁好了。
回复
superhanxin5 2010-08-02
学习~~
回复
qq14923349 2010-08-02
[Quote=引用 10 楼 xxd_qd 的回复:]
你的对话框一关,各个控件窗口早已被全部销毁,里面的内容当然全没了。

要想保留,那就不能关闭对话框窗口。可以用ShowWindow隐藏,不过这样的话,你就不能用DoModal,因为对话框没关闭之前,DoModal不会返回,所以你必须使用非模态对话框。
[/Quote]
非模态对话框啊········
我不DOMODAL
回复
xxd_qd 2010-08-02
你的对话框一关,各个控件窗口早已被全部销毁,里面的内容当然全没了。

要想保留,那就不能关闭对话框窗口。可以用ShowWindow隐藏,不过这样的话,你就不能用DoModal,因为对话框没关闭之前,DoModal不会返回,所以你必须使用非模态对话框。
回复
qq14923349 2010-08-02
[Quote=引用 8 楼 xuddk727 的回复:]
表达不好,参考红猪的这句话 你再次DoModal出来的是一个新对话框了。
[/Quote]
就是这意思
我oncancel返回主窗口,下次控件又重新刷新,原本的clistctrl记录没有了

现在我用个CStringArray记录所有的,再一次出来,但是这样太浪费了


怎么处理啊
不用oncancel
showwindow隐藏?
回复
wltg2001 2010-08-01
主窗口声明了子窗口对象,并DoModal子窗口,
问题是子窗口里面我有个clistctrl
主窗口用了ONTIME定时增加值给那个CLISTCTRL
但是我发现每次打开子窗口的CLISTCTRL都是空的,所以我怀疑子窗口的OnInitDialog每打开一次把界面都刷空了,
=============
当然是空的了,你调用DoModal之后关闭了它,对话框都没了,它里面的控件的内容当然也没有了,你再次DoModal出来的是一个新对话框了。
回复
xxd_qd 2010-08-01
[Quote=引用 2 楼 mengfeihong 的回复:]
主窗口跟DOMODAL出来的子窗口,要交互的话一般要用到新线程。否则DOMODAL不返回,主窗口就阻塞在那了,ONTIMER嘛。。。
[/Quote]
这个就是彻底的概念错误了。DoModal不返回就叫阻塞?要照这么理解的话,那我写个程序,函数A调用函数B,函数B又调用函数A,那岂不成死锁了?

DoModal本身就是个消息环,因此DoModal不返回不影响任何窗口处理任何消息。
回复
na_he 2010-08-01
尽量把对listctrl的初始化以及refresh放在自己的父窗口完成.
回复
tiger413 2010-08-01
子窗口的控件都在是子窗口的初始化函数中实现的啊,那样好一点
回复
蒙飞鸿 2010-08-01
主窗口跟DOMODAL出来的子窗口,要交互的话一般要用到新线程。否则DOMODAL不返回,主窗口就阻塞在那了,ONTIMER嘛。。。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……