VC++中窗口的最大化问题
2010-10-10 09:49
169 查看
看到很多MFC初学者都有这样的问题:MFC单文档程序默认运行时窗口不是最大化,怎么才能使其一开始就最大化显示,其实对于这个问题,很多网友都解释的不清楚,或是不全面!
其实这是在修改MFC的窗口界面的外观,修改MFC窗口的外观或是风格是要用到类风格(CS_XXXX)和窗口风格(WS_XXXX),学过MFC的学者都知道在WinMain函数中,最开始都定义了WNDCLASS窗口类,该类可以改变窗口的图标,背景,光标等;
若要改变窗口的大小,一般在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中修改构造类cs的值,可以修改cs的cx,cy来改变大小;如果要最大化,就要修改cs.style|=WS_MAXIMIZE 使主框架类(CMainFrame)最大化,自然视图类(CView)创建时也会跟随主框架类(CMainFrame)而变化,但是此时显示时,仍然是没有变化,因为MFC主框架类(CMainFrame)的最后显示要通过SW_XXXX参数来决定,一些朋友就建议在CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);前加入m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);或直接改掉,其实最终效果可以实现,但运行开始时会出现先是正常的小窗口,然后马上变成最大化,给人的视觉效果明显不好!
那为什么会产生这种效果,是因为在m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);调用之前会先调用 CMainFrame::ActivateFrame(int nCmdShow);此时便会根据nCmdShow(默认为SW_SHOWNORMAL)调用显示窗口一次,SW_SHOWNORMAL会根据cs中的cx,cy,x,y来显示窗口,所以cs.style便失去作用(视图类(CView)已经创建,所以它已经是最大化了),所以再次调用m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);会形成视觉暂留!
最终解决方法是
1.重载CMainFrame::ActivateFrame(int nCmdShow)
2.令nCmdShow=SW_SHOWMAXIMIZED即可
3.在CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);会根据之前的设置而显示窗口
其实这是在修改MFC的窗口界面的外观,修改MFC窗口的外观或是风格是要用到类风格(CS_XXXX)和窗口风格(WS_XXXX),学过MFC的学者都知道在WinMain函数中,最开始都定义了WNDCLASS窗口类,该类可以改变窗口的图标,背景,光标等;
若要改变窗口的大小,一般在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中修改构造类cs的值,可以修改cs的cx,cy来改变大小;如果要最大化,就要修改cs.style|=WS_MAXIMIZE 使主框架类(CMainFrame)最大化,自然视图类(CView)创建时也会跟随主框架类(CMainFrame)而变化,但是此时显示时,仍然是没有变化,因为MFC主框架类(CMainFrame)的最后显示要通过SW_XXXX参数来决定,一些朋友就建议在CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);前加入m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);或直接改掉,其实最终效果可以实现,但运行开始时会出现先是正常的小窗口,然后马上变成最大化,给人的视觉效果明显不好!
那为什么会产生这种效果,是因为在m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);调用之前会先调用 CMainFrame::ActivateFrame(int nCmdShow);此时便会根据nCmdShow(默认为SW_SHOWNORMAL)调用显示窗口一次,SW_SHOWNORMAL会根据cs中的cx,cy,x,y来显示窗口,所以cs.style便失去作用(视图类(CView)已经创建,所以它已经是最大化了),所以再次调用m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);会形成视觉暂留!
最终解决方法是
1.重载CMainFrame::ActivateFrame(int nCmdShow)
2.令nCmdShow=SW_SHOWMAXIMIZED即可
3.在CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);会根据之前的设置而显示窗口
相关文章推荐
- VC文档程序启动时窗口最大化问题
- VC++中窗口的最大化问题
- VC 多文档窗口 子窗口最大化时切换窗口 窗口没有最大化显示的问题
- 解决vc最大化窗口时,任务栏被覆盖的问题
- 无标题栏窗口最大化会把任务栏给遮住,如何解决这个问题?
- VC++MFC 窗口最大化、最小化的实现!
- 修复金山词霸只有最大化和最小化两种窗口状态的问题
- 对话框窗口最大化盖住任务栏问题!OnGetMinMaxInfo,WM_GETMINMAXINFO
- VC窗口启动隐藏时闪烁问题解决方法
- VC单文档程序窗口运行最大化
- VC窗口入门常遇到的问题
- C#子窗口切换并显示最大化问题
- RibbonControl在窗口最大化时的问题
- 窗口最大化后超出液晶显示器的屏幕范围的问题
- VC 常见问题百问~确定应用程序的路径~~如何在对话框中显示一个位图?~~窗口重绘
- VC++ Hook截取鼠标点击窗口消息的问题!全局钩子
- VC窗口启动隐藏时闪烁问题解决方法
- VC 判断窗口最大化最小化
- VC窗口启动隐藏时闪烁问题解决方法(原创)
- xfce 窗口最大化标题栏问题