C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 317 - Второй способ обработки сообщений CTabCtrl / MFC шаг за шагом / Visual C++

Шаг 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 указатель на диалог, который и выводим. Не знаю чем этот способ лучше или хуже, но надо обрабатывать всего одно событие.


| |
Автор Каев Артем.
[AD]