加强网站安全建设方案,企业安全文化建设导则,河北网站建设就业考试,企业培训内容碰到的这个问题不知道用怎样的词去表达。能反映在屏幕上的就是MFC的窗体不能正常的进入#xff0c;双击图标后#xff0c;窗体死在那边#xff0c;进而程序挂掉。在挂掉之前#xff0c;窗体是不停的闪烁#xff0c;就像抽筋一样。 产生问题的背景和条件#xff1a; 1双击图标后窗体死在那边进而程序挂掉。在挂掉之前窗体是不停的闪烁就像抽筋一样。 产生问题的背景和条件 1用的SDI做框架 2在CMainFrame中将Frame切割成三部分是三部分。每部分对应一个View。 3用GDI重新画了整个窗体的边框包括标题栏Menu和Toolbar不是不想用皮肤控件没办法…… 产生问题的时间 1美工进入后给做的工具栏图标这样需要调整默认工具栏大小。 2在写代码的机器上没有任何问题测试跑的笔记本上也没有问题在别人的机器上就开始抽筋。 问题解决 1开始认为是自画的TitleMenu和Toolbar有问题全部弄成MFC自己的东西不能解决还是抽筋。 2踢掉很多代码发现在CMainFrame::PreCreateWindow(CREATESTRUCT cs)中如果把有个风格的设置去掉在很多的机器上能用但是还有机器不行。 3仔细观察抽筋的窗体Toolbar不显示。把Toolbar的CreateEx去掉不抽了。或者把StatusBar去掉也不抽。 4开始考虑屏幕大小和Toolbar大小的问题。 5经过测试 A当屏幕分辨率的Y值为768的时候Toolbar的Height∈ [44,55]的时候窗体抽筋。 B当屏幕分辨率的Y值为800的时候Toolbar的Height∈ [49,60]的时候窗体抽筋。 C当屏幕分辨率的Y值为1050的时候Toolbar的Height∈ [86,97]的时候窗体抽筋。 所以开始怀疑是微软的bug。难道代码要跟每个特定分辨率结合还有为什么不能使用Height跨度是13在下面的最小的框架中也没找到我们哪个地方有个13这个值肯定不是我设定的 另外在PreCreateWindow中去掉那句话的实际作用是使整个Frame的大小变了几个像素。 6删除98%代码只剩最简单框架。挨个检查代码。 在CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext)中对Frame切割了两次 m_wndSplitter1.SetColumnInfo m_wndSplitter2.SetRowInfo 试着去掉这两行这样做当时只是简单的认为初始化的时候很必要设定每个View的大小因为在下面的OnSize函数中有设定视图大小的。 去掉了不管什么值都没有问题。 试着去掉其中一行也是没有问题。 总结 1遗留系统总会给我们意想不到的惊喜。 2MFC太诱惑。 3任何东西初始化都是必要的但不要过于猛烈的初始化。下面的OnSize函数是可以调整View的大小的 4与Bug作斗争其乐无穷。 我们的生活需要力量。 转载于:https://www.cnblogs.com/onthebox/archive/2009/02/15/1390854.html