Мы с Вами в предыдущем шаге "Шаг 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;