如何最大化窗口
展开全部
1. 窗口的最大化
修改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参数来决定,网上有些朋友就建议在 CXXXXApp::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);会形成视觉暂留,
最终解决方法是重载CMainFrame::ActivateFrame(int nCmdShow);令nCmdShow=SW_SHOWMAXIMIZED即可,然后m_pMainWnd-ShowWindow(SW_SHOW);会根据之前的设置而显示窗口
2. CView中的控件改变大小。
使用GetClientRect (&rect)可以得到客户区的大小,但是MFC先按默认大小显示窗口然后再最大化,所以在OnInitialUpdate()函数里调用GetClientRect ()函数得到的Rect大小是最大化以前,若想在OnInitialUpdate()函数里生成控件并均匀排列无法达到预期效果,这时候需要在程序最大化以后再在重载的OnSize ()函数里调用控件的MoveWindow函数重新布局控件。
修改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参数来决定,网上有些朋友就建议在 CXXXXApp::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);会形成视觉暂留,
最终解决方法是重载CMainFrame::ActivateFrame(int nCmdShow);令nCmdShow=SW_SHOWMAXIMIZED即可,然后m_pMainWnd-ShowWindow(SW_SHOW);会根据之前的设置而显示窗口
2. CView中的控件改变大小。
使用GetClientRect (&rect)可以得到客户区的大小,但是MFC先按默认大小显示窗口然后再最大化,所以在OnInitialUpdate()函数里调用GetClientRect ()函数得到的Rect大小是最大化以前,若想在OnInitialUpdate()函数里生成控件并均匀排列无法达到预期效果,这时候需要在程序最大化以后再在重载的OnSize ()函数里调用控件的MoveWindow函数重新布局控件。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询