Хэндл щита в таб контроле (SysTabControl32)

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
engine
Сообщения: 13
Зарегистрирован: 10 фев 2008, 17:50

Как получить хэндл щита в таб контроле?
Добавлять щит умею, а как хэндл получить не понимаю.
Мне хэндл нужен, чтоб динамически размещать на его щите другие контролы.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

А че такое щит?

Находишь окно где находится нужный тебе элемент, зптем перебираешь дочерние - вот тебе и хендл..
engine
Сообщения: 13
Зарегистрирован: 10 фев 2008, 17:50

Duncon писал(а):А че такое щит?
Щит(sheet) - это лист, отдельная вкладка, один элемент в таб контроле.
Duncon писал(а):Находишь окно где находится нужный тебе элемент, зптем перебираешь дочерние - вот тебе и хендл..
Можно по подробней. Что за окно? Дочерние чего? Щита?
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

На самом деле у элемента SysTabControl32 всего один хэндл - это его собственный. У кажой отдельной страницы нет своего хэндла, есть лишь номера позиции, как в LISTBOX.
engine
Сообщения: 13
Зарегистрирован: 10 фев 2008, 17:50

Получается при выборе одной из вкладок мне придется удалять все элементы предыдущего щита и создавать элементы нового щита?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Не удалять, а прятать. Используй ShowWindow(handle, SW_HIDE).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Обычно для каждой страницы формируется отдельное дочернее окно диалога, на котором располагаются все необходимые элементы. Когда страницы переключаются, текущий диалог уничтожается, а другой на его месте создаётся.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

WinMain писал(а):Когда страницы переключаются, текущий диалог уничтожается, а другой на его месте создаётся.
В общем-то, как заметил выше Romeo, лучше не удалять, а HIDE-ить. Чтобы потом при переключении на закладку обратно не создавать вновь.

При переключении закладки мышкой в родительское окно TAB-контрола приходят два сообщения TCN_SELCHANGING и TCN_SELCHANGE. В первом через lParam передается информация о закладке, с которая производится уход. В TCN_SELCHANGE через lParam приходит информация о закладке, которая была выбрана.

А вот переключения между закладками через Ctrl+TAB автоматически не поддерживаются. Помнится, мне приходилось самому отлавливать эти нажатия и, отловив, самому переключать закладки.
На MFC выглядело примерно так:

Код: Выделить всё

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
{
 // TODO: Add your specialized code here and/or call the base class

  if (pMsg->message == WM_KEYDOWN) {

    if (pMsg->wParam == VK_TAB) {
      if (GetKeyState (VK_CONTROL) < 0) {  // CTRL pressed ?
       int iCurSel, iNewSel;
       // будем перемещаться на следующую (или предыдущую) закладку
        iCurSel = m_vMapTab.GetCurSel ();
        if (GetKeyState (VK_SHIFT) < 0) {  // SHIFT pressed ?
          iNewSel = ((iCurSel > 0) ? iCurSel - 1 : m_vMapTab.GetItemCount () - 1);
        }
        else {
          iNewSel = ((iCurSel < (m_vMapTab.GetItemCount () - 1)) ?
                           iCurSel + 1 : 0);
        };
        ForceSwitchToCityTab (iNewSel);
        return TRUE;
      };
    };  // if (pMsg->wParam == VK_TAB)

  };  // if (pMsg->message == WM_KEYDOWN)

  return CDialog::PreTranslateMessage(pMsg);
};
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

sheet - лист в переводе, ппс куда катится этот мир
Ответить