Шаг 318 - Подробнее о смене закладок в CTabCtrl

Мы с Вами в предыдущем шаге "Шаг 316 - Подробнее о CTabCtrl" использовали два сообщения, по которым показывали и скрывали окно диалога на закладке. Итак, при смене закладке передается извещение TCN_SELCHANGING.

Это извещение говорит о том, что текущая закладка уходит с экрана. Мы получали указатель на диалоговое окно и скрывали его.

tci.mask = TCIF_PARAM;
m_Tabs.GetItem(iTab, &tci);
CWnd* pWnd = (CWnd *)tci.lParam;
pWnd->ShowWindow(SW_HIDE);

После этого генерируется второе извещение о том, что выбирается закладка.

TCN_SELCHANGE 

Мы с Вами использовали это сообщение для того, чтобы вывести диалоговое окно связанное с этой закладкой на экран:

tci.mask = TCIF_PARAM;
m_Tabs.GetItem(iTab, &tci);
CWnd* pWnd = (CWnd *)tci.lParam;
pWnd->ShowWindow(SW_SHOW);

Обратите внимание на то, что при запуске мы подразумеваем, что активная первая закладка. Поэтому для m_Tabs.SetItem(0, &tci); мы используем Page1->ShowWindow(SW_SHOW);, а для остальных элементов, например, m_Tabs.SetItem(1, &tci) используем Page2->ShowWindow(SW_HIDE);

В диалоговом окне мы обрабатываем извещения о том, что это происходит:

BEGIN_MESSAGE_MAP(CTestTabDlg, CDialog)
	//{{AFX_MSG_MAP(CTestTabDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
	ON_NOTIFY(TCN_SELCHANGING, IDC_TAB1, OnSelchangingTab1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

Извещения вот такие:

TCN_SELCHANGE lpnmhdr = (LPNMHDR) lParam; 
TCN_SELCHANGING lpnmhdr = (LPNMHDR) lParam; 

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.