Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Somebody
Сообщений: n/a
#1

CTabCtrl - как с ним работать? - C++

03.02.2008, 09:01. Просмотров 1607. Ответов 4
Метки нет (Все метки)

Попытался разобраться с этим компонентом, да застрял.
Задачка: разместить на разных вкладках объекта различные компоненты (скорее всего, посредством подгрузки ресурсов). Каким образом увязать компоненты с определенной вкладкой?
Господа, кто-нибудь же работал, СПАСИТЕ-е-е-е!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2008, 09:01     CTabCtrl - как с ним работать?
Посмотрите здесь:

Как создавать массивы объектов, и как к ним обращаться? C++
Для чего нужен С/С++ и как ним пользоваться? C++
C++ Где брать практические задания и как лучше практиковатся по ним?
Как узнать и прочитать файл до того как с ним начнет работать другая программа C++
CGraphView... Как с ним работать. C++
Как вернуть массив обьектов для дальнейшей работы с ним? C++
Как в односвязном списке поменять местами один элемент и следующий за ним? C++
STL STACK как с ним работать? C++
Что такое SDK и как с ним работать? C++
C++ Как получить доступ к элементам массива работая с ним как с указателем и адресной арифметикой
C++ Как работать с указателями и как работать с ссылками
Как передать файл в класс, и работать там с ним? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
03.02.2008, 11:46     CTabCtrl - как с ним работать? #2
Если ты только начинаешь и используешь VС++ 6.0, то лучше всего воспользоваться помошником. Это где-то в меню проект->добавить новые компоненты, появится 2 папки, выбери ту, что не связана с ActiveX, там можно найти интересные вещи, такие как ToolTips, Tip of the day, Добавление TabCtrl диалога и многое другое...

Удачи, Владимир
Somebody
Сообщений: n/a
03.02.2008, 13:50     CTabCtrl - как с ним работать? #3
Спасибо, сейчас полезу!
Tremr
Сообщений: n/a
31.12.2008, 11:27     CTabCtrl - как с ним работать? #4
Что бы ты не выбрал работать на низком уровне оно будет примерно так. CTabCtrl объект это всего лишь картинка. Нужно обрабатывать сообщение TCN_SELCHANGE (непомню как точно по английски, короче смена закладки). CTabCtrl может выдавать номер выбранной закладки. Нужно просто высвечивать дочерние окна соответственно выбранной закладке. Окна создаются отдельно, можно в визуальном редакторе. Там были какие-то команды позволяющие высветить окно именно в TabCtrl`е но я их щас не помню. Я сам совсем недавно над тем же корячился, а потом нашел через Рамблер сылку на интересный архив по программированию. Но потерял ссылку и теперь безуспешно пытаюсь найти её опять. Удачи.
Tremr
Сообщений: n/a
01.01.2009, 16:03     CTabCtrl - как с ним работать? #5
Вот откопал код реализующий закладки с помощью TabCtrl. В моей программе три закладки. Их я создал в визуальном редакторе и назначил классы от CDialog. Ну убрал из них конечно заголовки окна и т. п. Вот короче код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
BOOL CMonitorDlg::OnInitDialog() 
{
    CDialog::OnInitDialog();
 
    TC_ITEM tci;   // в нее записываются параметры создаваемой закладки
 
    memset(&tci,0,sizeof(tci));
    tci.mask = TCIF_TEXT;    // у закладки будет только текст
 
    tci.pszText = 'Объекты'; // название закладки
    m_Tab.InsertItem(0, &tci); // первая закладка имеет индекс 0
 
    tci.pszText = 'Монитор';
    m_Tab.InsertItem(1, &tci);  // вставляем вторую закладку
 
    tci.pszText = 'Параметры';
    m_Tab.InsertItem(2, &tci);  // вставляем вторую закладку
 
    
    //Задаём показ первой закладки при создании окна MonitorDlg
    NMHDR hdr;
 
    hdr.code = TCN_SELCHANGE;
    hdr.hwndFrom = m_Tab.m_hWnd;
 
    SendMessage ( WM_NOTIFY, m_Tab.GetDlgCtrlID(), (LPARAM)&hdr );
 
  
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}
 
void CMonitorDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
    //int id; // ID диалога 
    /**Здесь я кое-что изменил. Не стал удалять окна а просто гасить и выводить заново.
    вродебы работает. Строки предыдущего варианта не стал удалять на всякий случай.
    Я просто их забил. Только в новом варианте нужно объявить объекты окон-закладок
В файле заголовке родительского окна*/
 
  // надо сначала удалить предыдущий диалог в Tab Control'е:
  if (m_pTabDlg)
  {
    //m_pTabDlg->DestroyWindow();
    //delete m_pTabDlg;
    m_pTabDlg->ShowWindow ( SW_HIDE ); // Вместо удаления    закладки, я здесь просто                                                                                            //прячу ее
  }
 
  // теперь в зависимости от того, какая закладка выбрана, 
  // выбираем соотв. диалог
  switch( m_Tab.GetCurSel()+1 ) // +1 для того, чтобы порядковые номера закладок
                                // и диалогов совпадали с номерами в case
  {
    // первая закладка
    case 1 :
          //id = IDD_TabObject;
          //m_pTabDlg = new CPageObject;
          m_pTabDlg = &m_TabObject; 
            // тип указателя соответствует нужному диалогу,
            // иначе добавленный в диалог код не будет функционировать
    break;
 
    // вторая закладка
    case 2 :
          //id = IDD_TabMonitor;
          //m_pTabDlg = new CPageMonitor;
          m_pTabDlg = &m_TabMonitor;
    break;
 
     // Третья закладка
    case 3 :
          //id = IDD_TabOptions;
          //m_pTabDlg = new CPageOptions;
          m_pTabDlg = &m_TabOptions;
    break;
 
    // все остальные закладки, если они есть,
    // будут здесь тоже представлены, каждая - отдельным case
 
    // а если обработка такого номера не предусмотрена
    default:
       /*m_pTabDlg = new CDialog; // новый пустой диалог
       return;*/
        m_pTabDlg = &m_TabMonitor;
        break;
 
   } // end switch
 
  // создаем диалог
  //m_pTabDlg->Create (id, (CWnd*)&m_Tab); //параметры: ресурс диалога и родитель
 
  CRect rc; 
 
  m_Tab.GetWindowRect (&rc); // получаем 'рабочую область'
  m_Tab.ScreenToClient (&rc); // преобразуем в относительные координаты
 
  // исключаем область, где отображаются названия закладок:
  m_Tab.AdjustRect (FALSE, &rc); 
 
  // помещаем диалог на место..
  m_pTabDlg->MoveWindow (&rc);
 
  // и показываем:
  m_pTabDlg->ShowWindow ( SW_SHOWNORMAL );
Yandex
Объявления
01.01.2009, 16:03     CTabCtrl - как с ним работать?
Ответ Создать тему
Опции темы

Текущее время: 06:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru