现在的位置: 首页 > 综合 > 正文

VC6.0+VS2008环境下 MFC SDI 全屏显示 去掉标题 去掉菜单

2013年09月26日 ⁄ 综合 ⁄ 共 2268字 ⁄ 字号 评论关闭

思路:

  1. 按下F11时转换全屏显示方式
  2. 全屏时需要记录窗口当前位置
  3. 记录工具栏、状态栏的显示属性
  4. 隐藏/显示菜单栏
  5. 隐藏/显示标题栏
  6. 最大化/最小化窗口

 

技术要点:

  1. 为View添加KeyDown事件,当nChar==122时添加处理代码。
  2. 在View中获取MainFrame的指针:CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
  3. 在MainFrame中添加状态等变量:

    public:
    bool m_bFullScreenMode;
    CMenu m_menuMainWnd;

    private:
    bool m_bStatusBarWasVisible, m_bToolBarWasVisible;

    CRect m_mainRect;

  4. 在MainFrame的OnCreate事件中初始化变量值: this->m_menuMainWnd.LoadMenu(IDR_MAINFRAME);
    this->SetMenu(&m_menuMainWnd);
  5. 在MainFrame的构造函数中初始化全屏状态为false:this->m_bFullScreenMode = false;
  6. 在MainFrame中添加开关函数:FullScreenModeSwitch
  7. 在MainFrame中添加全屏的开关函数:FullScreenModeOn、FullScreenModeOff

 

核心代码

VC6.0下

void CMainFrame::FullScreenModeOn() 
{ 
    m_bToolBarWasVisible=(m_wndToolBar.IsWindowVisible()!=0);//隐藏工具栏之前工具栏的显示状态    
    m_wndToolBar.ShowWindow(SW_HIDE);//隐藏工具栏 

    m_bStatusBarWasVisible=(m_wndStatusBar.IsWindowVisible()!=0);//隐藏状态栏之前状态栏的显示状态 
    m_wndStatusBar.ShowWindow(SW_HIDE);//隐藏状态栏 

    //隐藏菜单栏 
    SetMenu(NULL); 

    // 保存以前的位置信息 
    GetWindowRect(&m_mainRect); 

    // 去除主窗口的标题 
    LONG style=::GetWindowLong(m_hWnd,GWL_STYLE); 
    style&=~WS_CAPTION; 
    ::SetWindowLong(m_hWnd,GWL_STYLE,style); 
     
    //得到当前系统的分辨率 
    int screenx=GetSystemMetrics(SM_CXSCREEN); 
    int screeny=GetSystemMetrics(SM_CYSCREEN); 
     
    // 全屏显示 
    SetWindowPos(NULL,-4,-4,screenx+8,screeny+8,SWP_NOZORDER); 
    style=::GetWindowLong(this->m_hWnd,GWL_STYLE); 

    //设置全屏显示标志 
    m_bFullScreenMode=true; 
} 

void CMainFrame::FullScreenModeOff() 
{ 
    //恢复窗口标题 
    LONG style=::GetWindowLong(m_hWnd,GWL_STYLE); 
    style|=WS_CAPTION; 
    ::SetWindowLong(m_hWnd,GWL_STYLE,style); 
    //如果需要,显示工具栏 
    if(m_bToolBarWasVisible) 
        m_wndToolBar.ShowWindow(SW_SHOW); 
    //如果需要,显示状态栏 
    if(m_bStatusBarWasVisible) 
        m_wndStatusBar.ShowWindow(SW_SHOW); 
    //恢复窗口以前的大小 
    MoveWindow(&m_mainRect); 

    //恢复菜单栏 
    this->SetMenu(&m_menuMainWnd); 

    //设置全屏显示标志 
    m_bFullScreenMode=false; 
} 

void CMainFrame::FullScreenModeSwitch() 
{ 
    if(this->m_bFullScreenMode) 
    { 
        this->FullScreenModeOff(); 
    } 
    else 
    { 
        this->FullScreenModeOn(); 
    } 
}

vs2008下

1.需要在FullScreenModeOn() 增加m_wndMenuBar.ShowWindow(SW_HIDE);//隐藏菜单栏;

在FullScreenModeOff()增加m_wndMenuBar.ShowWindow(SW_SHOW);//显示菜单栏

在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 函数中注释掉 //OnApplicationLook(theApp.m_nAppLook);

2.在// CXxxApp 初始化BOOL CXxxApp::InitInstance()函数末尾增加

CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
 pMain->FullScreenModeSwitch();//全屏显示

VS2008参考VC6.0的修改的

VC6.0的代码转自http//www.cnblogs.com/youring2/archive/2010/08/25/1808518.html本文版权归原作者所有

 

抱歉!评论已关闭.