1 // CTabCtrlEx.cpp: 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "MusicPlayer2.h" 6 #include "CTabCtrlEx.h" 7 8 9 // CTabCtrlEx 10 11 IMPLEMENT_DYNAMIC(CTabCtrlEx, CTabCtrl) 12 13 CTabCtrlEx::CTabCtrlEx() 14 { 15 16 } 17 18 CTabCtrlEx::~CTabCtrlEx() 19 { 20 } 21 22 void CTabCtrlEx::AddWindow(CWnd* pWnd, LPCTSTR lable_text) 23 { 24 if (pWnd == nullptr || pWnd->GetSafeHwnd() == NULL) 25 return; 26 27 InsertItem(m_tab_list.size(), lable_text); 28 29 pWnd->SetParent(this); 30 pWnd->MoveWindow(m_tab_rect); 31 32 m_tab_list.push_back(pWnd); 33 } 34 35 void CTabCtrlEx::SetCurTab(int index) 36 { 37 SetCurSel(index); 38 39 int tab_size = m_tab_list.size(); 40 for (int i = 0; i < tab_size; i++) 41 { 42 if (i == index) 43 { 44 m_tab_list[i]->ShowWindow(SW_SHOW); 45 m_tab_list[i]->SetFocus(); 46 } 47 else 48 { 49 m_tab_list[i]->ShowWindow(SW_HIDE); 50 } 51 } 52 } 53 54 55 BEGIN_MESSAGE_MAP(CTabCtrlEx, CTabCtrl) 56 ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CTabCtrlEx::OnTcnSelchange) 57 END_MESSAGE_MAP() 58 59 60 61 // CTabCtrlEx 消息处理程序 62 63 64 65 66 void CTabCtrlEx::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult) 67 { 68 // TODO: 在此添加控件通知处理程序代码 69 int tab_selected = GetCurSel(); 70 SetCurTab(tab_selected); 71 72 *pResult = 0; 73 } 74 75 76 void CTabCtrlEx::PreSubclassWindow() 77 { 78 // TODO: 在此添加专用代码和/或调用基类 79 80 //计算子窗口的位置 81 GetClientRect(m_tab_rect); 82 CRect rcTabItem; 83 GetItemRect(0, rcTabItem); 84 m_tab_rect.top += rcTabItem.Height() + 4; 85 m_tab_rect.left += 4; 86 m_tab_rect.bottom -= 4; 87 m_tab_rect.right -= 4; 88 89 CTabCtrl::PreSubclassWindow(); 90 } 91