• MFC--自定义CMFCTabCtrl的实现


    在MFC实现桌面程序时,可能会用到TabView效果,我实现的是最基本的效果,如下图:

    下面介绍详细的实现过程,如果需要效果更好看些,自行美化。

    1、  创建自定义MFCTabCtrl类MyMFCTabCtrl继承自CMFCTabCtrl。之所以要自己实现自定义的控件,主要是因为MFC自带的MFCTabCtrl无法实现标签页的关闭。怎么new一个新的类并继承该继承的父类,不再叙述。

    2、  在自定义的类中需要重载左鼠标按下的消息。即添加如下图消息

     消息处理函数如下,记住一定要先执行基类,即把执行父类中左键按下的消息代码放在最前面

     1 void CMyMFCTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
     2 {
     3     // TODO: 在此添加消息处理程序代码和/或调用默认值
     4     //要先执行基类,否则界面会失去焦点
     5     CMFCTabCtrl::OnLButtonDown(nFlags, point);
     6     if(m_rectCloseButton.PtInRect(point))
     7     {
     8         int nTab = GetActiveTab();
     9         if(nTab > -1)
    10         {
    11             //这个是我工程里面每个标签页的界面
    12             CPortSet *dlg = (CPortSet *)GetTabWnd(nTab);
    13             dlg->SendMessage(WM_DESTROY,0,0);
    14             RemoveTab(nTab);
    15         }
    16     }
    17 }

    3、  在调用CMyMFCTabCtrl的类中定义变量:CMyMFCTabCtrl m_tabCtrl;实现代码如下:

    m_tabCtrl.Create(CMyMFCTabCtrl::STYLE_FLAT,tabRect,this,1,CMFCTabCtrl::LOCATION_BOTTOM);
    m_tabCtrl.EnableScrollBar(SB_BOTH);
    m_tabCtrl.EnableActiveTabCloseButton();

    4、 添加WM_SIZE消息函数,保证控件随窗口大小变化而变化。

    void CIMU4View::OnSize(UINT nType, int cx, int cy)
    {
        CFormView::OnSize(nType, cx, cy);
        //获取当前窗体的大小,用于设置tabctrl的大小
        
        if(m_tabCtrl/*&& nType != 1*/)
        {
            CRect tabCtrlRect;
            m_tabCtrl.GetClientRect(&tabCtrlRect);
            //将控件大小转换为对话框中的区域坐标
            ScreenToClient(&tabCtrlRect);
            //cx/m_viewRect.Width()是对话框的横向变化比例
            tabCtrlRect.left = 0;
            tabCtrlRect.right = cx;
            tabCtrlRect.top = 0;
            tabCtrlRect.bottom = cy;
            m_tabCtrl.MoveWindow(&tabCtrlRect);
        }
        GetClientRect(&m_viewRect);
    }
  • 相关阅读:
    浅谈display:flex
    MVVM
    HDFS 伪分布式集群搭建
    HDFS入门
    Hadoop-HDFS
    Hadoop介绍
    大数据-高并发Nginx
    大数据-高并发LVS3Keepalived
    大数据-高并发LVS2实验
    大数据-高并发LVS1
  • 原文地址:https://www.cnblogs.com/ling123/p/7028988.html
Copyright © 2020-2023  润新知