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