Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CTabCtrl в MFС работает на половину 
:(
    Опции темы
Include
Дата 5.8.2005, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 1.8.2005

Репутация: нет
Всего: нет



Откопал метод создания окошка с закладками (CTabCtrl)
Вот описания метода
Цитата
На нашем основном диалоге (там где будут сидеть вкладки) рисуем ТабКонтрол (он №19 на панели инструментов) по размеру соответствующий желаемым размерам будущих страниц.

Создаём шаблоны диалогов в редакторе ресурсов (это наши будущие страницы), на второй странице их св-в (щелчок правой кнопкой мыши на диалоге -> Properties) ставим каждому
Style = child
Border = None
Title bar = no

Размеры диалогов значения не имеет, им вовсе не обязательно быть одинаковыми и совпадать по размеру с ТабКонтролом.

Пусть класс нашего основного диалога зовётся COurDlg.
Тогда:

Члены класса COurDlg:

HWND m_TabPages[_d_TabPagesNum];

В заголовке класса COurDlg объявим количество будущих страниц в ТабКонтроле

#define _d_TabPagesNum 2

В конструкторе COurDlg::COurDlg

ZeroMemory(m_TabPages, sizeof(m_TabPages));

В COurDlg::OnInitDialog()

      //.........................
      //.........................

      //Счетчик для циклов
      int i;

      //Создадим страницы если ещё не созданы
      //(!!!) здесь предполагается что идентификаторы шаблонов диалогов равны IDD_DIALOG1, IDD_DIALOG1 + 1 и т.д.
      if (!m_TabPages[0])
      {
            for (i = 0; i < _d_TabPagesNum; i++)
            {
                  m_TabPages[i] = CreateDialog(AfxGetInstanceHandle(),
                                              MAKEINTRESOURCE(IDD_DIALOG1 + i), m_TabCtrl, NULL);
            }
      }

      //Зададим страницам правильные размер и положение на ТабКонтроле
      CRect l_Rect;
      m_TabCtrl.GetClientRect(l_Rect);
      l_Rect.top            += 25;
      l_Rect.left          += 2;
      l_Rect.right          -= 2;
      l_Rect.bottom        -= 2;

      for (i = 0; i < _d_TabPagesNum; i++)
      {
            ::MoveWindow(m_TabPages[i], l_Rect.left, l_Rect.top, l_Rect.Width(), l_Rect.Height(), true);
      }
     
      //Создаём закладки в контроле
      for (i = 0; i < _d_TabPagesNum; i++)
      {
            CString c_Caption;
            c_Caption.Format("%d", i);
            m_TabCtrl.InsertItem(i, c_Caption /*Впишите сюда свои названия закладок*/);
      }

      //Делаем первую страницу активной
      m_TabCtrl.SetCurSel(0);
      ActivateTabPage(0);

Далее, создаём функцию-член класса COurDlg (она будет отображать нужную нам страницу и прятать остальные)

void COurDlg::ActivateTabPage(int p_NumPageToActivate)
{
      for (int i = 0; i < _d_TabPagesNum; i++)
      {
            ::ShowWindow(m_TabPages[i], ((i == p_NumPageToActivate) ? SW_SHOW : SW_HIDE));
      }
}

2) ТабКонтрол -> TCN_SELCHANGE

void COurDlg::OnSelchange***(NMHDR* pNMHDR, LRESULT* pResult)
{
      ActivateTabPage(m_TabCtrl.GetCurSel());
     
      *pResult = 0;
}

3) Если вы также хотите обрабатывать смену страницы (в смысле - в зависимости от каких-то критериев менять страницу или нет), то делаем так:

Создаём обработчик ТабКонтрол -> TCN_SELCHANGING

void COurDlg::OnSelchanging***(NMHDR* pNMHDR, LRESULT* pResult)
{
      int l_OldPageNum = m_TabCtrl.GetCurSel();

      //если разрешить менять страницу то
      *pResult = 0;
      //если запретить менять страницу то
      *pResult = 1;
}

Всё. Радуемся жизни smile


закладки работают на половину те между ними можно переключаться, но если вставить кнопку, по нажитию которой появляется сообщение, или ЕдитБокс, Чек... и тд от события не происходит smile
может кто подсажет почему smile
PM MAIL   Вверх
Coocky
Дата 5.8.2005, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



А вот мой метод....
Создаем обьект CTabCtrl Tabs;
Добавляем Указатели на классы окон
Mydialog1*page1;
Mydialog1*page2......
.....page5;

и
CDialog *mdlg;

Код

TC_ITEM tci;
    tci.mask = TCIF_TEXT;
    tci.iImage = -1;

    tci.pszText = "Backward Links";
    Tabs.InsertItem(0, &tci);
    tci.pszText = "Linkdomain";
    Tabs.InsertItem(1, &tci);
tci.pszText = "Indexed Pages";
    Tabs.InsertItem(2, &tci);
tci.pszText = "Contain URL";
    Tabs.InsertItem(3, &tci);
tci.pszText = "Keywords Ranking";
    Tabs.InsertItem(4, &tci);
page1=new BackWardLinks;
page2=new LinksDomain;
page3=new IndexedPages;
page4=new ContainURL;
page5=new Keywords;
tci.mask = TCIF_PARAM;
    tci.lParam = (LPARAM)page1;
    Tabs.SetItem(0, &tci);
    tci.lParam=(LPARAM)page2;
    Tabs.SetItem(1,&tci);
tci.lParam=(LPARAM)page3;
    Tabs.SetItem(2,&tci);
tci.lParam=(LPARAM)page4;
    Tabs.SetItem(3,&tci);
tci.lParam=(LPARAM)page5;
    Tabs.SetItem(4,&tci);
    
    
    page1->Create(BackWardLinks::IDD, &Tabs);
    page1->SetWindowPos(NULL, 2,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
    page1->ShowWindow(SW_SHOW);
m_dlg=page1;
    page2->Create(LinksDomain::IDD, &Tabs);
    page2->SetWindowPos(NULL, 2,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
    page2->ShowWindow(SW_HIDE);
    page3->Create(IndexedPages::IDD, &Tabs);
    page3->SetWindowPos(NULL, 2,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
    page3->ShowWindow(SW_HIDE);
    page4->Create(ContainURL::IDD, &Tabs);
    page4->SetWindowPos(NULL, 2,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
    page4->ShowWindow(SW_HIDE);
    page5->Create(Keywords::IDD, &Tabs);
    page5->SetWindowPos(NULL, 2,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
    page5->ShowWindow(SW_HIDE);


Обработчик в классе окна, где создавалась закладка
Код

void GeneralDialog::OnTcnSelchangeTab3(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: Add your control notification handler code here
    if(m_dlg)
   {
      m_dlg->ShowWindow(SW_HIDE);
   }

   switch(Tabs.GetCurSel())
   {
   case 0:
      m_dlg = page1;
      break;
   case 1:
      m_dlg = page2;
      break;
case 2:
      m_dlg = page3;
      break;
case 3:
      m_dlg = page4;
      break;
case 4:
      m_dlg = page5;
      break;
  }

   if(m_dlg)
   {
      m_dlg->ShowWindow(SW_SHOW);
   }
    *pResult = 0;
}




--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
kometa_triatlon
Дата 5.8.2005, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 1
Всего: 6



Юзайте CPropertySheet и CPropertyPage
Получаем столько классов сколько у нас закладок, в каждом потом создаем обработчики, юзаем DDX/DDV и все в ажуре...


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Include
Дата 6.8.2005, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 1.8.2005

Репутация: нет
Всего: нет



Coocky пасибо попробую поюзать
kometa_triatlon
Цитата
DDX/DDV
а об этом можно чуть по подробней
PM MAIL   Вверх
Coocky
Дата 6.8.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Include
Цитата
пасибо попробую поюзать

даже не пробуй, а юзай!
Это код с моей проги smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.