zoukankan      html  css  js  c++  java
  • 嵌入CMFCOutlookBar CSplitterWnd窗格

    介绍 本文帮助您在CSplitterWnd窗格中添加一个CMFCOutlookbar。上面的图片显示了Visual Studio 2008和MFC功能包中提供的Office 2007类型的UI。有关更多细节,请参考此链接:Visual c++ 2008特性包:MFC增强。 使用的代码 默认情况下,Office 2007 UI生成的代码中的CMFCOutlookBar嵌入到CFrameWnd派生类中。在这里,我们将讨论在CSplitterWnd/CSplitterWndEx窗格中添加一个CMFCOutlookBar。 隐藏,复制Code

    BOOL COffice2007Frame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,    
                           CCreateContext* pContext)
    {
        BOOL bRet=true;  
        bRet=bRet&m_wndSplitter.CreateStatic(this,2,2);
        CRect rectClient;
        this->GetClientRect(&rectClient); 
        bRet=bRet&m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMFCOutlookBar),
             CSize(rectClient.Width()/4,rectClient.Height()/2),pContext); 
        bRet=bRet&m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(COffice2007View),
             CSize(rectClient.Width()*3/4,rectClient.Height()/2),pContext); 
        bRet=bRet&m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(COffice2007View),
             CSize(rectClient.Width()/4,rectClient.Height()/2),pContext); 
        bRet=bRet&m_wndSplitter.CreateView(1,1,RUNTIME_CLASS(COffice2007View),
             CSize(rectClient.Width()*3/4,rectClient.Height()/2),pContext);      
        return bRet;  
    }

    上面的代码将拆分器窗口划分为四个不相等的窗格。在第一个窗格中创建视图的过程中,给出了一个CMFCOutlookBar运行时指针,因此它将在第一个窗格中创建一个OutlookBar。 隐藏,复制Code

    CMFCOutlookBar* pPane_0_0=(CMFCOutlookBar*)m_wndSplitter.GetPane(0,0);
    pPane_0_0->GetParent()->ModifyStyle(WS_CHILDWINDOW,WS_CHILDWINDOW|
                                        WS_CLIPCHILDREN,SWP_DRAWFRAME);

    在上面的代码中,我们使用GetPane函数获取OutlookBar的指针,并修改splitter父窗格的属性以添加WS_CLIPCHILDREN属性。如果我们不添加此属性,那么在焦点更改时,拆分器窗口窗格将覆盖展望栏。 通过更改此属性,它会在调试编译模式下造成调试断言失败的问题。要解决这个问题,派生类CSplitterWndEx并覆盖函数OnInvertTracker()。 隐藏,复制Code

    void CDSplitterWndEx::OnInvertTracker(const CRect& rect )
    {
        this->GetPane(0,0)->GetParent()->ModifyStyle(WS_CLIPCHILDREN,
                            0,SWP_DRAWFRAME);
        this->GetPane(0,1)->GetParent()->ModifyStyle(WS_CLIPCHILDREN,
                            0,SWP_DRAWFRAME);
        this->GetPane(1,0)->GetParent()->ModifyStyle(WS_CLIPCHILDREN,
                            0,SWP_DRAWFRAME);
        this->GetPane(1,1)->GetParent()->ModifyStyle(WS_CLIPCHILDREN,
                            0,SWP_DRAWFRAME);
    
        CSplitterWndEx::OnInvertTracker(rect); //Base class
    
        this->GetPane(0,0)->GetParent()->ModifyStyle(0, 
                            WS_CLIPCHILDREN,SWP_DRAWFRAME);
        this->GetPane(0,1)->GetParent()->ModifyStyle(0,
                            WS_CLIPCHILDREN,SWP_DRAWFRAME);
        this->GetPane(1,0)->GetParent()->ModifyStyle(0,
                            WS_CLIPCHILDREN,SWP_DRAWFRAME);
        this->GetPane(1,1)->GetParent()->ModifyStyle(0,
                            WS_CLIPCHILDREN,SWP_DRAWFRAME);
    }

    上面的代码在调用OnInverTracker以从调试断言失败中转escape之前删除每个窗格的WS_CLIPCHILDREN属性,然后再次将该属性添加回每个窗格。 的兴趣点 这段代码对于那些想用自己的方式修改MFC Outlook 2008的人特别有用。这只是演示了如何在SplitterWnd窗格中添加一个CMFCOutlookBar来代替默认的主框架窗口。 本文转载于:http://www.diyabc.com/frontweb/news10957.html

  • 相关阅读:
    c语言指针讲解第一节初识指针
    linux的的一些入门常识
    sql手注的思路
    mysql主从备份配置
    CentOS 6.5 nginx+tomcat+ssl配置
    mysql 5.7.18安装教程
    minIO分布式集群搭建+nginx负载均衡
    Linux常用命令
    使用python连接mysql数据库——pymysql模块的使用
    with与上下文管理器
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473293.html
Copyright © 2011-2022 走看看