zoukankan      html  css  js  c++  java
  • MFC单文档(SDI)全屏程序的实现 拓荒者

    思路:

    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

    核心代码:

    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();
        }
    }

    示例程序源代码下载

    作者:独钓寒江
    来源:草屋&拾荒 - 独钓寒江的技术博客
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    2021年9月 北京、西安两地,高薪诚聘 .NET工程师,请私信联系!
    如果认为此文对您有帮助,别忘了支持一下哦!
    声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。转载时请在文章页面明显位置给出原文链接。
  • 相关阅读:
    串一串《数学之美》中的信息论的几个章节
    失败经历--在windows下安装meld
    xv6实验环境搭建
    python爬取网站数据
    零散知识
    Pycharm使用技巧
    变量
    电信光猫强制wifi(SSID)名称ChinaNet开头解决办法之一
    PhpStorm 常用快捷键
    Android Studio 安装与使用ADB wifi 无线调试
  • 原文地址:https://www.cnblogs.com/youring2/p/1808518.html
Copyright © 2011-2022 走看看