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编译, 没有发现这个问题,
有兄弟碰到过此问题吗, 可否解决?

谢谢
...全文
257 12 打赏 收藏 举报
写回复
用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的真正原因你是不可能解决的,所有的解决方法都依赖于你知道什么时候窗口应该禁止这个
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)内容概要:本文介绍了基于神经网络的数据驱动迭代学习控制(ILC)算法,旨在解决具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统中无人车的路径跟踪问题。该方法结合神经网络的学习能力与ILC的迭代优化机制,在无需精确系统模型的前提下,通过多次任务执行不断修正控制输入,以实现对期望轨迹的高精度跟踪。文章详细阐述了算法的设计原理、稳定性分析以及在无人车路径跟踪中的具体实现与仿真验证,展示了其在处理模型不确定性与提升跟踪精度方面的有效性。; 适合人群:具备自动控制、机器人或人工智能基础知识,从事无人车、自动化控制、智能系统研发的研究人员及工程师。; 使用场景及目标:①解决无人车在复杂环境下因系统模型未知或不精确导致的路径跟踪难题;②提升重复性作业中控制系统对理想轨迹的跟踪精度与鲁棒性;③为非线性、不确定性系统的先进控制策略设计提供理论参考与实践案例。; 阅读建议:建议读者结合Matlab代码实现进行学习,重点关注神经网络与ILC的融合机制、控制律的设计过程以及仿真结果的分析,以深入理解数据驱动方法在解决模型未知问题上的优势。
内容概要:本资源聚焦于分数阶系统(FOS)的Lyapunov指数谱计算,涵盖分数阶Lorenz系统、4D分数阶Chen系统和分数阶Duffing振荡器三种典型非线性动力学模型。通过提供完整的Matlab代码实现,系统介绍了分数阶微分方程的数值求解方法、李雅普诺夫指数谱的计算原理与算法流程,旨在帮助研究人员定量分析分数阶系统的混沌特性与动力学行为,为复杂系统的稳定性判定、分岔分析及混沌控制研究提供技术支撑。; 适合人群:具备一定动力系统与数值计算基础,从事非线性科学、混沌理论、分数阶微积分等相关领域研究的硕士、博士研究生及科研人员。; 使用场景及目标:① 学习和掌握分数阶微分方程的数值积分方法(如Adams-Bashforth-Moulton算法);② 深入理解Lyapunov指数谱的物理意义及其在判定系统混沌、稳定与周期运动中的应用;③ 利用提供的Matlab代码对特定分数阶系统进行动力学仿真与分析,复现经典结果或拓展至新的研究对象。; 阅读建议:此资源以Matlab代码为核心,强调理论与实践的紧密结合。使用者应在理解分数阶微积分基本理论和Lyapunov指数计算原理的基础上,仔细研读并调试所提供的代码,通过修改系统参数、初始条件等方式进行探究式学习,从而深化对分数阶系统复杂动力学行为的理解。
代码转载自:https://pan.quark.cn/s/447eda883a93 在本文中,我们将详细研究利用微控制器MSP430F5529来操控MPU6050传感器,并从其输出数据中推算出欧拉角。让我们来熟悉相关的主要构成部分。MSP430F5529是由德州仪器(TI)研发的一款16位超低功耗微控制器,它具备丰富的外部设备接口和强大的处理性能,非常适合多样化的嵌入式系统应用,尤其是传感器监控领域。MPU6050则是InvenSense公司推出的一款六轴惯性测量装置(IMU),该设备集成了三轴陀螺仪和三轴加速度计,能够检测设备的旋转状态和线性运动情况。 **一、MSP430F5529与MPU6050的连接** 1. **I2C通信协议**:MSP430F5529借助I2C总线与MPU6050进行数据交换。在I2C协议框架内,MSP430担任主设备角色,而MPU6050则扮演从设备角色。主设备负责控制数据传输过程,从设备则响应请求并传输数据。 2. **配置MPU6050**:在启动通信流程之前,必须设定MPU6050的工作模式、采样频率、满量程范围等参数。这一过程通常通过发送特定的I2C指令来完成。 3. **数据获取**:MPU6050的陀螺仪和加速度计数据通过I2C接口持续不断地或按需提供。微控制器周期性地读取这些数据,用以监控设备的动态变化情况。 **二、陀螺仪和加速度计原始数据解读** 1. **陀螺仪数据**:陀螺仪测量的是角速度,其单位通常是dps(度/秒)。该数据反映了设备围绕三个正交轴的旋转速度。 2. **加速度计数据**:加速度计测量的是线性加速度,其单位通常是g(重力加速度的倍数)。它能够感知设备在三个正交轴上的静态和动态加速度变化。...

15,976

社区成员

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

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