CMFCTABCTRL 简介及BUG处理
?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();//使窗體重畫
總結
以上是生活随笔為你收集整理的CMFCTABCTRL 简介及BUG处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c/c++使用gsoap发布和调用web
- 下一篇: CMFCTabCtrl的使用