vc6,MFC, disable close(X) 异常

kobefly 2010-05-12 11:26:22
在VC6中用MFC做了一个对话框,
这个对话框用于显示进度变化,
也就是说,这个对话框在Timer里做了一些操作
而这些操作有些是需要一些时间的,也就意味着这个对话框在某些时间无法响应事件...

在所有操作没有完成之前, 我是把右上角的close button, 也就是那个红X给disable的

但是现在遇到一个问题,
在对话框无法响应的时间点击或者拖动对话框, 那个X会enable起来一会,反应过来后会再disable,
而且在enable的时候, 是可以真的关掉对话框的

用VS 2008编译, 没有发现这个问题,
有兄弟碰到过此问题吗, 可否解决?

谢谢
...全文
181 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-05-14
  • 打赏
  • 举报
回复
其实是这样的
标题栏实际上是操作系统接管的
当你的程序无响应是操作系统会让用户有一种关闭程序的途径
所以你的关闭按钮会被启用
而当你的程序有相应了自然就按你自己的方式处理了
这样做的好处是用户不会因为程序的down掉而无法关闭
所以你应该改变处理机制
不过以上只是个人猜测
没有理论支持
仅供参考
kobefly 2010-05-14
  • 打赏
  • 举报
回复
目前看起来,
在单线程下没有什么好的办法?
kobefly 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xianglitian 的回复:]
其实是这样的
标题栏实际上是操作系统接管的
当你的程序无响应是操作系统会让用户有一种关闭程序的途径
所以你的关闭按钮会被启用
而当你的程序有相应了自然就按你自己的方式处理了
这样做的好处是用户不会因为程序的down掉而无法关闭
所以你应该改变处理机制
不过以上只是个人猜测
没有理论支持
仅供参考
[/Quote]

恩, 有可能这种情形
那我就另起一个线程了...


顺便问一个问题, 我一个dialog里有2个button,
打算加上hotkey, 也就是在首字母前加&

发现一个问题, 下划线不会显示,
当按下ALT键后, 下划线会显示出来,

请问能否一直让下划线显示呢?
wuhuwy 2010-05-13
  • 打赏
  • 举报
回复
你在Timer的过程中直接屏蔽Close消息不也可以吗,等进度完成后再取消屏蔽消息
kobefly 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xianglitian 的回复:]
引用 5 楼 kobefly 的回复:
引用 4 楼 xianglitian 的回复:
你这个需求是不是应该采用多线程处理


恩, 我想多线程应该可以解决问题,
只是我想在目前不改变程序结构的情况下,
VC6有否可能解决这个问题呢?

6.0也可以做多线程啊
[/Quote]

恩, 是可以的
不知道单线程有否解决办法呢
向立天 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kobefly 的回复:]
引用 4 楼 xianglitian 的回复:
你这个需求是不是应该采用多线程处理


恩, 我想多线程应该可以解决问题,
只是我想在目前不改变程序结构的情况下,
VC6有否可能解决这个问题呢?
[/Quote]
6.0也可以做多线程啊
Eleven 2010-05-13
  • 打赏
  • 举报
回复
这样大量的计算操作还是不要放在主线程里去做吧,界面不能得到及时的响应总归是不好的
kobefly 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuhuwy 的回复:]
你在Timer的过程中直接屏蔽Close消息不也可以吗,等进度完成后再取消屏蔽消息
[/Quote]
这样的话, X还是会被disable的在这过程中,
只是不会被关掉吧
kobefly 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglitian 的回复:]
你这个需求是不是应该采用多线程处理
[/Quote]

恩, 我想多线程应该可以解决问题,
只是我想在目前不改变程序结构的情况下,
VC6有否可能解决这个问题呢?
向立天 2010-05-13
  • 打赏
  • 举报
回复
你这个需求是不是应该采用多线程处理
kobefly 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
也许你某个地方代码又把它enable了,例如:你timer如果做状态翻转,可能上次没完成,下次timer又到,就又enable了

如果找不到enable的真正原因你是不可能解决的,所有的解决方法都依赖于你知道什么时候窗口应该禁止这个
[/Quote]

恩,理论上是这样子的
我的timer事件其实只会执行一次,
代码中没有去enable这个X的

而且同样的代码, 我用visual studio 2008来编译就不会出现这个现象

我在想, 这会不会是VC6的MFC 库的一个bug,
我是MFC新手, 对这个对话框的重绘过程不是很懂的

arong1234 2010-05-12
  • 打赏
  • 举报
回复
也许你某个地方代码又把它enable了,例如:你timer如果做状态翻转,可能上次没完成,下次timer又到,就又enable了

如果找不到enable的真正原因你是不可能解决的,所有的解决方法都依赖于你知道什么时候窗口应该禁止这个

15,980

社区成员

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

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