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