• MFC用对话框作容器时忘记增加DS_CONTROL风格导致的程序假死现象


      现在做的项目是一个基于MFC对话框的试验数据管理程序,根据试验不同的阶段,要分组显示三批控件:试验参数设置界面、试验答案填写界面、试验结果展示界面。为了界面管理和逻辑管理的方便,使用3个对话框作为容器来包含不同界面的控件。

      在程序即将交付时,将程序拿到了一个破机器上跑,发现程序在切换到其他程序或者最小化之后,或者调试切换到VS后,再切换回来会产生程序假死无响应的现象。一开始以为是OSG三维显示模块占用资源过大导致的,结果把OSG模块注释掉之后没有变化。

      最后多次测试后发现在程序刚启动后切换没有问题,但是当焦点在那几个容器对话框上之后就会假死。于是调查将对话框作为容器显示的正确方法。发现是少了这么两句:

    m_SettingLayer.Create(IDD_DIALOG_SETTINGLAYER, this);
    m_SettingLayer.MoveWindow(10, 100, 500, 600);
    //少了这一句,将此对话框作为控件看待
    m_SettingLayer.ModifyStyle(0, DS_CONTROL);
    //少了这一句,使得在主界面可以用tab来导航。
    m_SettingLayer.ModifyStyleEx(0, WS_EX_CONTROLPARENT);
    m_SettingLayer.ShowWindow(SW_SHOW);

      加上这两句之后,程序占用从占满i7的25%CPU到现在几乎没什么占用。错怪OSG了。

      但是具体这两句话为什么会导致切换程序假死、CPU占用居高不下,暂时没有时间去研究,等以后再追究原因吧。就酱。

  • 相关阅读:
    css属性选择器
    css各浏览器的兼容性写法
    使元素的宽度由内容撑开的方法
    DOM应用
    css圣杯布局、等高布局
    总结css兼容问题
    table注意事项
    相对定位、绝对定位在IE6的问题
    IE6,7下li标签的间隙
    清除浮动的7种方法
  • 原文地址:https://www.cnblogs.com/winnersun/p/2984870.html
Copyright © 2020-2023  润新知