MFCJ基于单文档生成时默认最大化的设置

来源:互联网 发布:淘宝卖家信誉等级 编辑:程序博客网 时间:2024/06/07 21:51

 一 方法    

      1.重载CMainFrame::ActivateFrame(int nCmdShow)

      2.令nCmdShow=SW_SHOWMAXIMIZED

      3.CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);

 二 具体解释

      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来显示窗口,当再次调用m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);会形成视觉暂留!

解决办法:在MainFrm.cpp中

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){if( !CFrameWndEx::PreCreateWindow(cs) )return FALSE;// TODO: 在此处通过修改//  CREATESTRUCT cs 来修改窗口类或样式//  CREATESTRUCT cs 来修改窗口类或样式/*cs.style &=~FWS_ADDTOTITLE;  */cs.lpszName = "自主识别与功能重构";  ////设定窗口的尺寸  //cs.cx = 600;  //cs.cy = 450;  //return TRUE;  return TRUE;}