CMFCTABCTRL 简介及BUG处理-------关闭按钮以及失焦刷新(窗体改变大小时)

来源:互联网 发布:win7的c语言编程软件 编辑:程序博客网 时间:2024/04/30 01:16

 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();//使窗体重画

原创粉丝点击