Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tab Control на чистом API, как реализовать? 
:(
    Опции темы
Max Damage
Дата 9.6.2003, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как реализовать TabControl на чистом API, без MFC?
PM MAIL   Вверх
man2002ua
Дата 9.6.2003, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Создаешь окно с именем класса SysTabControl32.
А как работать с ним - смотри макросы TabCtrl_xxxxxxxxx они и в хелпе есть.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Max Damage
Дата 10.6.2003, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2man2002ua
А можно каким-то образом в апишный таб-контрол подпихнуть созданные конструктором диалоги?
PM MAIL   Вверх
man2002ua
Дата 10.6.2003, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй CreateDialog, в качестве hWndParent указать Handle созданного TabControl


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Max Damage
Дата 7.7.2003, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Еще есть идеи у кого-то насчет подпихивания в табконтрол диалогов?
PM MAIL   Вверх
RAN
Дата 8.7.2003, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

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



Max Damage, открой хелп. Диалоги в TabControl - это обычная практика и "другие идеи" не нужны. Или твой случай какой-то особенный? Тогда опиши поподробней.

У меня сделано так:
При создании TabControl создаются диалоги и окна, между которыми будет переключение, без WS_VISIBLE. В переменную HWND ActiveWindow; заноситься хэндл первого диалога (он же делается видимым). И просто обрабатывается переключение табов (ActiveWindow скрываем, через switch по номеры таба в ActiveWindow заносим новый хендл, делаем его видимым).
PM MAIL ICQ   Вверх
Max Damage
Дата 8.7.2003, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2RAN
Ничего особенного, просто я полное ламо в этом вопросе а хелп в 7-ой студии - ацтой, экзампл кода приведи пжалста.
PM MAIL   Вверх
RAN
Дата 8.7.2003, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

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



в WM_CREATE:
Код

   RECT rc;
   GetClientRect(hwnd, &rc);
   HWND TCHandle = CreateWindow(WC_TABCONTROL, "", WS_CHILD | WS_VISIBLE,
              0, 0, rc.right, rc.bottom, hwnd, NULL, hInst, NULL);
   TC_ITEM tie;
   tie.mask = TCIF_TEXT | TCIF_IMAGE;
   tie.iImage = -1;

   static char* title[] = {
       "Заголовок1",
       "Заголовок2",
       "Заголовок3",
       NULL };
   register unsigned i = 0;
   while( (tie.pszText = title[i]) != NULL )
       TabCtrl_InsertItem(TCHandle, i++, &tie);

   //Создаём диалоги и окна
   HWND InfoDlg = CreateDialog(hInst, "INFO_DLG", TCHandle, InfoDlgProc);
   HWND SizeDlg = CreateDialog(hInst, "SIZE_DLG", TCHandle, SizeDlgProc);
   HWND DescWnd = CreateWindow("DESCWND", "Test", WS_CHILD, CW_USEDEFAULT, CW_USEDEFAULT,
                        CW_USEDEFAULT, CW_USEDEFAULT, TCHandle, NULL, hInst, NULL);
   
   //Получим область для отображения окна
   TabCtrl_AdjustRect(TCHandle, FALSE, &rc);
   ActiveWnd = InfoDlg;
   SetWindowPos( ActiveHWnd, NULL, rc.left, rc.top, rc.right, rc.bottom, SWP_NOZORDER);


В WM_NOTIFY TCN_SELCHANGE:
Код

   register int page = TabCtrl_GetCurSel(TCHandle);
   GetWindowRect(TCHandle, &rc);
   TabCtrl_AdjustRect(TCHandle, FALSE, &rc);
   
   ShowWindow(ActiveHWnd, SW_HIDE);  //Прячем текущее окно

   //Определяем новое окно и показываем его
   switch(n){
       case 0:
           ActiveHWnd= InfoDlg;
           break;
       case 1:
           ActiveHWnd= SizeDlg;
           break;
       case 2:
           ActiveHWnd= DescWnd;
           break;
       }
   SetWindowPos(ActiveHWnd, NULL, rc.left, rc.top, rc.right, rc.bottom, SWP_NOZORDER);
   ShowWindow(ActiveHWnd, SW_SHOW);


P.S. Это так, для примера. ВОЗМОЖНЫ ОШИБКИ, прошу прощения. Просто у меня, каждое окно - это класс, а здесь я всё лишнее вырезал, возможно не совсем корректно.

PM MAIL ICQ   Вверх
Max Damage
Дата 9.7.2003, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2RAN
Сэнкс, попробую.
PM MAIL   Вверх
Max Damage
Дата 10.7.2003, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2RAN
А TCN_SELCHANGE в WM_NOTIFY это lParam или wParam?
PM MAIL   Вверх
RAN
Дата 10.7.2003, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

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



WM_NOTIFY
idCtrl = (int) wParam; //В нашем случае совершенно бесполезная инфа. (В диалоге это ID элемента управления, пославшего WM_NOTIFY)
pnmh = (LPNMHDR) lParam; //Вот в этой структуре всё и содержится

typedef struct tagNMHDR {
HWND hwndFrom; //Handle TabContrl'а
UINT idFrom; //тоже, что и idCtrl
UINT code; //здесь код сообщения
} NMHDR;

Код

case WM_NOTIFY:
   if( ((LPNMHDR) lParam)->code == TCN_SELCHANGE)
          ....................................

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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