您的位置:首页 > 其它

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里修改窗口的样式。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐