MFC单文档程序中,在PreCreateWindow函数中修改窗口大小无而法生效的解决办法
2017-01-16 10:11
337 查看
一、问题原型
新建一个MFC单文档程序后,在Fram和View类中都尝试设置cs.cx和cs.cy的值,然后老天不给力,居然不起作用。带着一脸懵逼,反复调试,发现窗口不但不听程序猿的话,而且每次打开沿用上一次窗口拖动改变后的大小。
二、原因分析
带着万分沮丧的心情找谷歌,经过多方查找终于找到蛛丝马迹了。原来VS2010会将一些信息写入注册表,这其中就包括窗口样式信息,这个和之前VS2005,VS2008(SP1除外)不太一样,默认的SDI和MDI自带的BCG的一些东
西。分析源代码,App的InitInstance函数里,是先执行pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CvasFasternToolDoc),
RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CvasFasternToolView));,触发执行Doc、Frame、View代码,
然后执行if (!ProcessShellCommand(cmdInfo))处理shell命令,这其中就包括访问注册表相关信息,最后调用
m_pMainWnd->ShowWindow(SW_SHOW);和m_pMainWnd->UpdateWindow();显示更新窗口。因此当在Frame或
View里更改窗口样式时,后面也会被注册表记录的窗口样式覆盖,因此自定义窗口样式无法生效。
三、解决办法
1、第一种方法简单粗暴,直接在if (!ProcessShellCommand(cmdInfo)){return FALSE;}后调用m_pMainWnd->MoveWindow(CRect(100, 100, 500, 400), FALSE);
2、解决办法二,修改App类的int CvasFasternToolApp::ExitInstance()函数,然后就可以在Frame里修改窗口的样式。
相关文章推荐
- MFC中修改dockpane的位置生成的程序却没有生效的问题解决
- MFC 多文档 自定义浏览器新打开窗口解决办法
- MFC应用程序修改图标后,改变图标大小又变回原始图标的解决办法
- 【整理】MFC单文档程序窗口大小的设置
- MFC中修改dockpane的位置生成的程序却没有生效的问题解决
- Visual C++ 6.0 中 MFC 单文、多文档程序工具栏在 XP 风格下显示不正常的解决办法
- 【转】TNS-12541: TNS: 无监听程序 安装DB后修改IP地址的解决办法
- Form提交打开固定大小窗口的解决办法(VBscritp)
- 多文档、多模板程序建立新的子框架类后,出现“建立空文档失败”问题的解决办法
- Visual studio 2008/2010 MFC程序Menu、Toolbar字体偏小解决办法
- 使环境变量修改后立即生效的解决办法
- 多文档、多模板程序建立新的子框架类后,出现“建立空文档失败”问题的解决办法
- 修改Keil C 程序代码字体 修改Keil C 微软雅黑 以及 Keil C 光标定位不准的解决办法
- 如何修改MFC单文档的“无标题”、中间的横线、后面的窗口标题。
- 修改桌面堆栈大小,解决运行大量程序时出现”Out of Memory”(内存不足)错误信息的问题
- VC++6.0禁止改变单文档窗口大小,修改标题的实现
- MFC程序中文档标题、主窗口标题、子窗口标题的改变
- PB中表的修改对数据窗口和报表的影响的解决办法
- vc++解决单文档打印程序中打印预览与打印大小不等问题
- 关于domino R7密码修改老密码要很长时间生效的问题解决办法