您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 5浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

CMFCTABCTRL 简介及BUG处理

phymat.nico 发布时间:2015-01-09 13:21:51 ,浏览量:5

 CMFCTabCtrl类主要用于分页显示,与CTabCtrl类似,自我认为功能比TabCtrl强大,但中间却存在一些bug.

一、一般使用方法(vc2010同vs2008用法)

       1.对话框放置PictureCtrl,设Type=Rectangle,Visible=False,Color=Gray,ID=IDC_STATIC_TAB

       2.DDX_Control(pDX, IDC_STATIC_TAB, m_wndTabsArea);

       3.CMFCTabCtrl m_wndTabs;

       4.创建几个对话框Border=None,Style=Child,创建Dlg类如:CApplyBus 定义对象:m_ApplyBus,对话框ID:IDD_APPLYBUS

二、创建

          OnInitDialog()

          CRect rectTabs;           m_wndTabsArea.GetWindowRect (rectTabs);           ScreenToClient (rectTabs);           m_wndTabs.Create (CMFCTabCtrl::STYLE_3D_ROUNDED_SCROLL, rectTabs, this, 1,CMFCTabCtrl::LOCATION_TOP);   //创建CMFCTabCtrl  m_wndTab对象

三、为m_wndTab添加选项卡

          m_ApplyBus.Create(IDD_APPLYBUS, &m_wndTab);  //创建对话框

          m_wndTabs.AddTab (&m_ApplyBus, _T("测试对话框"), (UINT)-1, FALSE);//将对话框假如属性页中,设置标题为:测试对话框

四、得到选项卡的个数

        m_wndTab.GetTabsNum();

五、设置为活动选项卡

        m_wndTab.SetActiveTab(temptab);  //设置第temptab为活动选项卡

 

六、BUG处理1------------------------------------------------------关闭按钮无法实现(参考)

        1、自己创建一个类继承自:CMFCTabCtr l如:CMyMFCTabCtrl

        2、重载afx_msg void OnLButtonDown(UINT nFlags, CPoint point)函数,函数定义如下:

            

          void CMyMFCTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)           {                        CMFCTabCtrl::OnLButtonDown(nFlags, point); 

                       if (m_rectCloseButton.PtInRect(point))                        {                                        int nTab = GetActiveTab();                                        if (nTab >= 0)                                       {                                                 CWnd* pWnd = GetTabWnd (nTab);                                                  pWnd->DestroyWindow ();                                                 //delete pWnd;                                                  RemoveTab(nTab);                                        }                         }           }

          3、创建时就可以直接用自己定义的类了:

          m_wndTabs.Create (CMyMFCTabCtrl::STYLE_3D_ROUNDED_SCROLL, rectTabs, this, 1,CMFCTabCtrl::LOCATION_TOP);

          后续如上。。。。。。。。。。。。

三、BUG2--------------------------------------------------------------------------------------失焦刷新的问题

          只需在所在类中的OnPaint()中刷新窗体即可:

         CWnd* m_wnd=m_wndTab.GetActiveWnd();//得到活动窗体的句柄          m_wnd->RedrawWindow();//使窗体重画

关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0445s