• Win32 框架文档视图(2)


    5.10 如何删除SDI框架窗口中的菜单

    DestroyMenu

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
        if( !CFrameWnd::PreCreateWindow(cs) )
            return FALSE;
    
        if (cs.hMenu != NULL)
        {
             //删除菜单
            DestroyMenu(cs.hMenu);
    
            //设置菜单句柄值为NULL
            cs.hMenu = NULL;
        }
    
        return TRUE;
    }
    

    5.11 如何删除MDI框架窗口中的菜单

    同上方法

    5.12 如何改变视图的背景颜色

    在OnEraseBkgnd事件中填充

    BOOL CDemoView::OnEraseBkgnd(CDC* pDC) 
    {
        //获得客户区大小
        CRect rect;
        GetClientRect(rect);
    
        //填充背景
        pDC->FillRect(&rect, &m_Brush);
    
        return TRUE;
    }
    

    5.13 如何改变MDI主框架窗口的背景颜色

    同上方法

    5.14 如何使MDI启动时不生成新的子窗口

    设置CCommandLineInfo的m_nShellCommand 字段

    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    
    cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
    

    5.15 如何排列MDI子框架窗口

    MDITile和MDICascade方法

    void CMainFrame::OnTilehWnd() 
    {
        //水平显示
        MDITile(MDITILE_HORIZONTAL);    
    }
    
    void CMainFrame::OnTilevWnd() 
    {
        //垂直显示
        MDITile(MDITILE_VERTICAL);
    }
    
    void CMainFrame::OnCascadeWnd() 
    {
        //层叠显示
        MDICascade();
    }
    

    image

    5.16 如何在SDI中切换多视图

    1. 使用GetActiveView方法查找当前View
    2. 查找想要转换的View,如果没有则创建一个
    3. 使用SetActiveView方法设置当前活动视图
    4. 显示新视图,隐藏旧视图
    5. 调用RecalcLayout方法重新布局
    void CMainFrame::SwitchView(int nView)
    {
        //获得旧视图(活动视图)指针
        CView* pOldView = GetActiveView();
        //获得新视图指针
        CView* pNewView = (CView*)GetDlgItem(nView);
        if (pNewView == NULL)
        {
            if (nView == 1)
            {
                pNewView = new CDemoView1();
            }
            else if (nView == 2)
            {
                pNewView = new CDemoView2();
            }
            else
            {
                return;
            }
    
            CCreateContext context;
            context.m_pCurrentDoc = pOldView->GetDocument();
    
            //创建新视图
            pNewView->Create(NULL, NULL, WS_BORDER, CFrameWnd::rectDefault, 
                this, nView, &context);
            
            pNewView->OnInitialUpdate();
        }
    
        //设置新视图为活动视图
        SetActiveView(pNewView);
    
        //显示新视图
        pNewView->ShowWindow(SW_NORMAL);    
        //隐藏旧视图
        pOldView->ShowWindow(SW_HIDE);
    
        //设置旧视图ID
        if (pOldView->GetRuntimeClass() == RUNTIME_CLASS(CDemoView1))
        {
            pOldView->SetDlgCtrlID(1);
        }
        else if (pOldView->GetRuntimeClass() == RUNTIME_CLASS(CDemoView2))
        {
            pOldView->SetDlgCtrlID(2);
        }
        //设置新视图ID
        pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    
        //重新布局
        RecalcLayout();                                        
    }
    
    void CMainFrame::OnSwitchView1() 
    {
        SwitchView(1);
    }
    
    void CMainFrame::OnUpdateSwitchView1(CCmdUI* pCmdUI) 
    {
        if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CDemoView1)))
        {
            pCmdUI->Enable(FALSE);
        }
        else
        {
            pCmdUI->Enable(TRUE);
        }
    }
    
    void CMainFrame::OnSwitchView2() 
    {
        SwitchView(2);
    }
    
    void CMainFrame::OnUpdateSwitchView2(CCmdUI* pCmdUI) 
    {
        if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CDemoView2)))
        {
            pCmdUI->Enable(FALSE);
        }
        else
        {
            pCmdUI->Enable(TRUE);
        }
    }
    
    

    5.17 如何在SDI中动态切分窗口

    即CSplitterWnd的应用

    image

    5.18 如何在SDI中静态切分窗口

    同上,所谓静态切分就是说初始化时就有切分功能.

    这些东西实际上都已经很落后,不管WinForm还是WPF,DOCKING && MDI都做的比这个好,而且简单.只不过MDI在MFC中属于内置的而已,了解下就好

  • 相关阅读:
    阿里云张新涛:连接产业上下游,构建XR协作生态
    从中间件到分布式数据库,PolarDBX的透明之路
    零信任策略下K8s安全监控最佳实践(K+)
    了解3D世界的黑魔法纯Java构造一个简单的3D渲染引擎
    EMR重磅发布智能运维诊断系统(EMR Doctor)——开源大数据平台运维利器
    PolarDBX拆分键推荐
    实战指南 | Serverless 架构下的应用开发
    【20220804】一定要遵守规则
    【20220810】给二宝取名
    【20220806】连岳摘抄
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/2004471.html
Copyright © 2020-2023  润新知