Шаг 317 - Второй способ обработки сообщений CTabCtrl

Есть возможность обрабатывать сообщение в одном месте OnTabChange(). Идея основана на том, что все наши страницы порождены от класса CDialog. Давайте заведем на него указатель:

class CTestTabDlg : public CDialog
{
// Construction
public:
	CDialog* mDlg;
......
};

И присвоим этому указателю тот диалог, который виден, то есть первый.

......
tci.mask = TCIF_PARAM;
tci.lParam = (LPARAM)Page1;
m_Tabs.SetItem(0, &tci);
Page1->Create(CTabPage1::IDD, &m_Tabs);
Page1->SetWindowPos(NULL, 40, 40, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
Page1->ShowWindow(SW_SHOW);
mDlg=Page1;
......

И переделаем реакцию на сообщение о смене закладки:

void CTestTabDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) 
{
   if(mDlg)
   {
      mDlg->ShowWindow(SW_HIDE);
   }

   switch(m_Tabs.GetCurSel())
   {
   case 0:
      mDlg = Page1;
      break;
   case 1:
      mDlg = Page2;
      break;
  }

   if(mDlg)
   {
      mDlg->ShowWindow(SW_SHOW);
   }
}

Как видите мы прячем текущую закладку, потом в зависимости от того какая страница текущая присваиваем mDlg указатель на диалог, который и выводим. Не знаю чем этот способ лучше или хуже, но надо обрабатывать всего одно событие.


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