Використання класу CTabCtrl
Void CTab_controlDlg:OnSelchangingTab (NMHDR* pNMHDR, LRESULT* pResult) {. Видалимо у себе непотрібні перемінні. PPage3→SetWindowPos (NULL, 10, 30, 0, 0, SWP_NOSIZE — SWP_NOZORDER); PPage2→SetWindowPos (NULL, 10, 30, 0, 0, SWP_NOSIZE — SWP_NOZORDER); PPage1→SetWindowPos (NULL, 10, 30, 0, 0, SWP_NOSIZE — SWP_NOZORDER); TODO: Add your control notification handler code here. VERIFY… Читати ще >
Використання класу CTabCtrl (реферат, курсова, диплом, контрольна)
Использование класу CTabCtrl
Tab control — це могутній засіб для рішенню багатьох негараздів у інтерфейсі додатків. Воно дозволять істотно збільшити швидкість роботи вашого докладання, розбити на «частини «діалог в зручною для користувача формі.
В MFC є вмонтований клас роботи з Tab control — клас CTabCtrl.
Для практики напишемо програму, яка використовувати клас CTabCtrl і де буде три «закладання «- діалогу.
Шаги створення проекту:
1) Спочатку створимо проект tab_control типу діалог.
2) У редакторі ресурсів додати Tab Control в шаблон діалогу й призначимо йому ID = IDC_TAB.
3) Використовуючи ClassWizard, додамо переменную-член типу CTabCtrl зі властивістю Control.
4) У OnInitDialog проинициализируем необхідні перемінні для CTabCtrl.
5) Використовуючи ClassWizard, додамо обробку необхідних повідомлень від Tab control «я.
6) Видалимо у себе непотрібні перемінні.
Для початку зробіть перші три пункту, створіть зміну m_ctrTab класу CTabCtrl. Після цього, у функцие BOOL CTab_controlDlg:OnInitDialog () добавте таке:
…
TC_ITEM TabItem;
TabItem.mask = TCIF_TEXT;
TabItem.pszText = «Закладка1 » ;
m_ctrTab.InsertItem (0, &TabItem);
TabItem.pszText = «Закладка2 » ;
m_ctrTab.InsertItem (1, &TabItem);
TabItem.pszText = «Закладка3 » ;
m_ctrTab.InsertItem (2, &TabItem);
…
Это код ініціалізації Tab Control, ми створюємо три закладання. Тепер потрібно, щоб за натискання кожну закладку, на екрані з’являлося те, що ми мусимо. Найпростіший варіант — це використати в кожну закладку по діалогу — і потім просто області Tab Control «а — виводити потрібний діалог, залежно від поточної закладання.
Сделаем це. Додамо три діалогу в редакторі ресурсів і створимо кожному їх за класом — наступникові від CDialog. Назвемо ці класи CPage1, CPage2 і CPage3(файли Page1. cpp (h), Page2. cpp (h), Page3. cpp (h)) .
В властивості цих трьох діалогів поставте Style як «Child «і Border як «none «- дуже важливо, а якраз в діалогах створіть якісь елементи (наприклад, типу Static Text), щоб бачили відмінність.
Напишите ці три рядки на початку файла tab_controlDlg.cpp.
#include «Page1.h «.
#include «Page2.h «.
#include «Page3.h «.
Продолжим в OnInitDialog:
Надо послідовно створити все сторінки, причому покажчики ними зберігаються у самому m_ctrTab !!! У цьому вся прикладі ми використали lParam структури TCITEM як сховище покажчика. Тепер перемінні pPage1, pPage2 і pPage3 більше непотрібні - покажчики зберігаються у надійному місці! Для кожної сторінки викликається метод ShowWindow () — для відображення першої, і приховання інших сторінок.
…
CPage1* pPage1;
pPage1 = new CPage1;
TabItem.mask = TCIF_PARAM;
TabItem.lParam = (LPARAM)pPage1;
m_ctrTab.SetItem (0, &TabItem);
VERIFY (pPage1->Create (CPage1:IDD, &m_ctrTab));
pPage1->SetWindowPos (NULL, 10, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
pPage1->ShowWindow (SW_SHOW);
CPage2* pPage2;
pPage2 = new CPage2;
TabItem.mask = TCIF_PARAM;
TabItem.lParam = (LPARAM)pPage2;
m_ctrTab.SetItem (1, &TabItem);
VERIFY (pPage1->Create (CPage2:IDD, &m_ctrTab));
pPage2->SetWindowPos (NULL, 10, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
pPage2->ShowWindow (SW_HIDE);
CPage3* pPage3;
pPage3 = new CPage3;
TabItem.mask = TCIF_PARAM;
TabItem.lParam = (LPARAM)pPage3;
m_ctrTab.SetItem (2, &TabItem);
VERIFY (pPage1->Create (CPage3:IDD, &m_ctrTab));
pPage3->SetWindowPos (NULL, 10, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
pPage3->ShowWindow (SW_HIDE);
…
Теперь додамо код по відображенню поточної сторінки і прихованню попередньої. І тому додамо оброблювачі повідомлень TCN_SELCHANGE і TCN_SELCHANGING :
void CTab_controlDlg:OnSelchangingTab (NMHDR* pNMHDR, LRESULT* pResult) {.
// TODO: Add your control notification handler code here.
int nTab = m_ctrTab.GetCurSel ();
TC_ITEM tci;
tci.mask = TCIF_PARAM;
m_ctrTab.GetItem (nTab, &tci);
ASSERT (tci.lParam);
CWnd* pWnd = (CWnd *)tci.lParam;
pWnd->ShowWindow (SW_HIDE);
*pResult = 0;
}.
void CTab_controlDlg:OnSelchangingTab (NMHDR* pNMHDR, LRESULT* pResult) {.
int nTab = m_ctrTab.GetCurSel ();
TC_ITEM tci;
tci.mask = TCIF_PARAM;
m_ctrTab.GetItem (nTab, &tci);
ASSERT (tci.lParam);
CWnd* pWnd = (CWnd *)tci.lParam;
pWnd->ShowWindow (SW_HIDE);
*pResult = 0;
}.
Здесь використовуються ті ж самі покажчики, які ми сховали в OnInitDialog.
Теперь визволимо пам’ять і зруйнуємо діалогові вікна при виході з докладання.
Добавим функцію OnDestroy:
void CTab_controlDlg:OnDestroy () {.
CDialog:OnDestroy ();
CWnd* pWnd;
TC_ITEM tci;
tci.mask = TCIF_PARAM;
for (int і = 2; i>=0; і—) {.
m_ctrTab.GetItem (i, &tci);
ASSERT (tci.lParam);
pWnd = (CWnd *)tci.lParam;
pWnd->DestroyWindow ();
delete pWnd;
}.
}.
Ну ось і, додаток готово.
Список литературы
Для підготовки даної роботи було використані матеріали із сайту internet.