// TODO: 在此添加额外的初始化代码 TCITEM item; item.mask = TCIF_TEXT; item.pszText = _T("覆盖率数据收集"); m_ctl_tb.InsertItem (0,&item); item.pszText = _T("覆盖率报告处理"); m_ctl_tb.InsertItem (1,&item); item.pszText = _T("覆盖率数据导出"); m_ctl_tb.InsertItem (2,&item); m_dlg1.Create (IDD_DIALOG1,&m_ctl_tb); m_dlg2.Create (IDD_DIALOG2,&m_ctl_tb); m_dlg3.Create(IDD_DIALOG3,&m_ctl_tb); m_dlg1.SetWindowPos (NULL,10,30,400,100,SWP_SHOWWINDOW); m_dlg2.SetWindowPos (NULL,10,30,400,100,SWP_HIDEWINDOW ); m_dlg3.SetWindowPos (NULL,10,30,400,100,SWP_HIDEWINDOW );或
this->m_ctl_tb.InsertItem(0,_T("覆盖率数据收集")); this->m_ctl_tb.InsertItem(1,_T("覆盖率报告处理")); this->m_ctl_tb.InsertItem(2,_T("覆盖率数据导出")); //关联对话框,并且将IDC_TABTEST控件设为父窗口 m_dlg1.Create(IDD_DIALOG1,&m_ctl_tb); m_dlg2.Create(IDD_DIALOG2,&m_ctl_tb); m_dlg3.Create(IDD_DIALOG3,&m_ctl_tb); //获得IDC_TABTEST客户区大小 CRect rs; m_ctl_tb.GetClientRect(&rs); //调整子对话框在父窗口中的位置 rs.top+=20; rs.bottom-=3; rs.left+=1; rs.right-=3; //设置子对话框尺寸并移动到指定位置 m_dlg1.MoveWindow(&rs); m_dlg2.MoveWindow(&rs); m_dlg3.MoveWindow(&rs); //分别设置隐藏和显示 m_dlg1.ShowWindow(true); m_dlg2.ShowWindow(false); m_dlg3.ShowWindow(false); //设置默认的选项卡 m_ctl_tb.SetCurSel(0);
然后加入消息处理函数:
void CNCSReport6Dlg::OnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 CRect r; m_ctl_tb.GetClientRect (&r); switch(m_ctl_tb.GetCurSel()) { case 0: m_dlg1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW); m_dlg2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW ); m_dlg3.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW ); break; case 1: m_dlg1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW); m_dlg2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW ); m_dlg3.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW ); break; case 2: m_dlg1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW); m_dlg2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW ); m_dlg3.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW ); break; } *pResult = 0; }
在CEdit中绘制Tab控件:
void CTabControlView::OnInitialUpdate() { // There is only one view ever, so it only needs to do the initial // update once--otherwise the application is resized needlessly. static BOOL bUpdatedOnce = FALSE; if (bUpdatedOnce) return; bUpdatedOnce = TRUE; CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); if (m_wndTab.GetSafeHwnd () != NULL) { return; } CRect rectTab; m_wndTabLoc.GetWindowRect (&rectTab); ScreenToClient (&rectTab); m_wndTab.Create (CMFCTabCtrl::STYLE_3D, rectTab, this, 1, CMFCTabCtrl::LOCATION_TOP); m_wndTab.SetImageList (IDB_ICONS, 16, RGB (255, 0, 255)); m_wnd1.Create (WS_CHILD | WS_VISIBLE, CRect (0, 0, 0, 0), &m_wndTab, 1); m_wnd1.SetFont (&afxGlobalData.fontRegular); m_wnd1.SetWindowText (_T("Edit 1")); m_wnd2.Create (WS_CHILD | WS_VISIBLE, CRect (0, 0, 0, 0), &m_wndTab, 2); m_wnd2.SetFont (&afxGlobalData.fontRegular); m_wnd2.SetWindowText (_T("Edit 2")); m_wnd3.Create (WS_CHILD | WS_VISIBLE, CRect (0, 0, 0, 0), &m_wndTab, 3); m_wnd3.SetFont (&afxGlobalData.fontRegular); m_wnd3.SetWindowText (_T("Edit 3")); m_wnd4.Create (WS_CHILD | WS_VISIBLE, CRect (0, 0, 0, 0), &m_wndTab, 4); m_wnd4.SetFont (&afxGlobalData.fontRegular); m_wnd4.SetWindowText (_T("Edit 4")); m_wndTab.AddTab (&m_wnd1, _T("One"), 0, FALSE); m_wndTab.AddTab (&m_wnd2, _T("Two"), 1, FALSE); m_wndTab.AddTab (&m_wnd3, _T("Three"), 2, FALSE); m_wndTab.AddTab (&m_wnd4, _T("Four"), 3, FALSE); m_nTabStyle = theApp.GetInt (_T("TabStyle"), 0); m_nTabLocation = theApp.GetInt (_T("TabLocation"), 0); m_nColor = theApp.GetInt (_T("TabColor"), 0); m_bTabIcons = theApp.GetInt (_T("TabIcons"), TRUE); m_bTabsSwap = theApp.GetInt (_T("TabsSwap"), TRUE); UpdateData (FALSE); OnSelchangeTabStyle(); OnLocation(); OnColor(); OnTabIcons (); OnTabSwap (); }
void CTabControlView::OnSelchangeTabStyle() { UpdateData (); CMFCTabCtrl::Style style; int nTab = 0; m_wndTabIcons.EnableWindow (); for (nTab = 0; nTab < m_wndTab.GetTabsNum (); nTab++) { m_wndTab.SetTabIcon (nTab, m_bTabIcons ? nTab : (UINT)-1); } switch (m_nTabStyle) { case 1: style = CMFCTabCtrl::STYLE_FLAT; m_wndTabIcons.EnableWindow (FALSE); for (nTab = 0; nTab < m_wndTab.GetTabsNum (); nTab++) { m_wndTab.SetTabIcon (nTab, (UINT)-1); } break; case 2: style = CMFCTabCtrl::STYLE_3D_ONENOTE; break; case 3: style = CMFCTabCtrl::STYLE_3D_VS2005; break; case 4: style = CMFCTabCtrl::STYLE_3D_ROUNDED; break; default: style = CMFCTabCtrl::STYLE_3D; } m_wndTab.ModifyTabStyle (style); m_wndTab.RecalcLayout (); m_wndTab.RedrawWindow (); theApp.WriteInt (_T("TabStyle"), m_nTabStyle); }
void CTabControlView::OnLocation() { UpdateData (); CMFCTabCtrl::Location location; switch (m_nTabLocation) { case 1: location = CMFCTabCtrl::LOCATION_BOTTOM; break; default: location = CMFCTabCtrl::LOCATION_TOP; } m_wndTab.SetLocation (location); m_wndTab.RecalcLayout (); m_wndTab.RedrawWindow (); theApp.WriteInt (_T("TabLocation"), m_nTabLocation); }
void CTabControlView::OnColor() { UpdateData (); CArray<COLORREF, COLORREF> arColors; switch (m_nColor) { case 0: m_wndTab.EnableAutoColor (FALSE); break; case 1: m_wndTab.EnableAutoColor (TRUE); break; case 2: arColors.Add (RGB (121, 210, 231)); arColors.Add (RGB (190, 218, 153)); arColors.Add (RGB (255, 170, 100)); m_wndTab.EnableAutoColor (TRUE); } m_wndTab.SetAutoColors (arColors); theApp.WriteInt (_T("TabColor"), m_nColor); }
void CTabControlView::OnTabIcons() { UpdateData (); for (int nTab = 0; nTab < m_wndTab.GetTabsNum (); nTab++) { m_wndTab.SetTabIcon (nTab, m_bTabIcons ? nTab : (UINT)-1); } m_wndTab.RecalcLayout (); m_wndTab.RedrawWindow (); theApp.WriteInt (_T("TabIcons"), m_bTabIcons); }
void CTabControlView::AddNotification (LPCTSTR lpszText) { if (m_wndNotifications.GetCount () > 100) { m_wndNotifications.DeleteString (0); } int nIndex = m_wndNotifications.AddString (lpszText); m_wndNotifications.SetCurSel (nIndex); } LRESULT CTabControlView::OnMoveTab(WPARAM wp, LPARAM lp) { CString str; str.Format (_T("AFX_WM_ON_MOVE_TAB: %d %d"), (int) wp, (int) lp); AddNotification (str); return 0; } LRESULT CTabControlView::OnChangeActiveTab(WPARAM wp, LPARAM /*lp*/) { CString str; str.Format (_T("AFX_WM_CHANGE_ACTIVE_TAB: %d"), (int) wp); AddNotification (str); return 0; } LRESULT CTabControlView::OnChangingActiveTab(WPARAM wp, LPARAM /*lp*/) { CString str; str.Format (_T("AFX_WM_CHANGING_ACTIVE_TAB: %d"), (int) wp); AddNotification (str); return 0; } void CTabControlView::OnTabSwap() { UpdateData (); m_wndTab.EnableTabSwap (m_bTabsSwap); theApp.WriteInt (_T("TabsSwap"), m_bTabsSwap); }