vs2010 如何设置MFC程序窗口大小
在vs2010中建立的MFC单文档程序,无论是在CMainFrame里的PreCreateWindow函数中对cs进行修改,还是使用SetWindowPos或MoveWi...
在vs2010中建立的MFC单文档程序,无论是在CMainFrame里的PreCreateWindow函数中对cs进行修改,还是使用SetWindowPos或MoveWindow函数,都无法实现对窗口的修改。
现在的状态是,如果给窗口加上可以调节大小这一style,那么窗口会自动保留上次更改后的大小,如果不加可调,那窗口就会按系统所固定的一个大小进行显示,根本无视我的所有设置,怎么办?
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWndEx::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.cx=500; //
cs.cy=500; //这两行完全无视
cs.style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU ;
return TRUE;
}
尝试使用MoveWindow(50,50,500,500);与SetWindowPos(NULL, 0, 0, 500, 500, SWP_NOZORDER | SWP_NOMOVE); 却都没有任何效果。
但应该不是vs编译的问题,因为之前用vs2008写好的一个MFC程序在2010的环境下编译后,能正常修改窗口大小,所以我感觉应该还是2010在MFC工程上的改动,希望有知道的人能回答一下。谢谢。 展开
现在的状态是,如果给窗口加上可以调节大小这一style,那么窗口会自动保留上次更改后的大小,如果不加可调,那窗口就会按系统所固定的一个大小进行显示,根本无视我的所有设置,怎么办?
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWndEx::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.cx=500; //
cs.cy=500; //这两行完全无视
cs.style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU ;
return TRUE;
}
尝试使用MoveWindow(50,50,500,500);与SetWindowPos(NULL, 0, 0, 500, 500, SWP_NOZORDER | SWP_NOMOVE); 却都没有任何效果。
但应该不是vs编译的问题,因为之前用vs2008写好的一个MFC程序在2010的环境下编译后,能正常修改窗口大小,所以我感觉应该还是2010在MFC工程上的改动,希望有知道的人能回答一下。谢谢。 展开
3个回答
展开全部
程序在注册表里保留了FRAME上次的状态,包括大小位置以及各工具类窗口的布局等.
解决方法有二,其中第一个简单, 第二更稳妥:
1.)在InitInstance(..)调用CleanState(_T("WorkSpace"));
2.)让MainFrame按它的习惯布局完了再调整大小, 在此之前让MainFrame不显示.关键点: WM_CREATE, WM_WINDOWPOSCHANGING
你可能还会发现FRAME有时候会闪一下, 看着不舒服, 用第二个方法同样管用.
解决方法有二,其中第一个简单, 第二更稳妥:
1.)在InitInstance(..)调用CleanState(_T("WorkSpace"));
2.)让MainFrame按它的习惯布局完了再调整大小, 在此之前让MainFrame不显示.关键点: WM_CREATE, WM_WINDOWPOSCHANGING
你可能还会发现FRAME有时候会闪一下, 看着不舒服, 用第二个方法同样管用.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询