您的位置:首页 > 其它

vs2010 设置MFC程序窗口大小无效的问题

2014-10-07 13:19 393 查看


转载自:http://blog.sina.com.cn/s/blog_62f521600100ml2l.html


vs2010 设置MFC程序窗口大小

问:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&
cs)

{

if(!CFrameWnd::PreCreateWindow(cs))

{

return FALSE;

}

cs.style &= ~WS_OVERLAPPED

cs.cy = 300;

cs.cx = 100;

return TRUE;

}

先上代码

在vs2010中,为什么运行时不会按要求改变窗口大小呢?而且运行的程序我手动拖窗口右下角改变大小后,再次启动时就是改变后的大小,为什么不是随机大小,或按我的CREATESTRUCT变量cs.cx,cs.cy改变大小呢?

解决方法:一.因为VS2010会将一些信息写入注册表,这个和之前VS2005,VS2008(SP1除外)不太一样,默认的SDI和MDI是带的BCG的一些东西。

你 要修改窗口大小,可以直接在App类的InitInstance中ShowWindow();UpdateWindow()之前修改窗口大小,例如 m_pMainWnd->MoveWindow(CRect(100, 100, 600, 400), FALSE);

二。
MFC的应用程序向导在VC6.0中和VS2010中有很多区别。VS2010的中的MFC的应用程序向导增加了不少新的选项。默认情况下建立MFC应用 程序,在VS2010中确实会出现楼主所说的现象。不过这个不和VC6.0的冲突,因为VS2010中的应用程序向导的默认选项和VC6.0的应用程序向 导的默认选项不同,楼主调整选项为和VC6.0一样即可。在VS2010的MFC的应用程序向导的第二步选择MFC标准,第6步选择使用经典菜单。其效果 即和VC6.0产生的效果一样。

程序在注册表里保留了FRAME上次的状态,包括大小位置以及各工具类窗口的布局等.

解决方法有二,其中第一个简单, 第二更稳妥:

1.)在InitInstance(..)调用CleanState(_T("WorkSpace"));

2.)让MainFrame按它的习惯布局完了再调整大小, 在此之前让MainFrame不显示.关键点: WM_CREATE, WM_WINDOWPOSCHANGING

你可能还会发现FRAME有时候会闪一下, 看着不舒服, 用第二个方法同样管用.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: