Страница 1 из 1

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

Добавлено: 10 фев 2008, 18:02
engine
Как получить хэндл щита в таб контроле?
Добавлять щит умею, а как хэндл получить не понимаю.
Мне хэндл нужен, чтоб динамически размещать на его щите другие контролы.

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

Добавлено: 11 фев 2008, 08:01
Duncon
А че такое щит?

Находишь окно где находится нужный тебе элемент, зптем перебираешь дочерние - вот тебе и хендл..

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

Добавлено: 11 фев 2008, 09:40
engine
Duncon писал(а):А че такое щит?
Щит(sheet) - это лист, отдельная вкладка, один элемент в таб контроле.
Duncon писал(а):Находишь окно где находится нужный тебе элемент, зптем перебираешь дочерние - вот тебе и хендл..
Можно по подробней. Что за окно? Дочерние чего? Щита?

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

Добавлено: 11 фев 2008, 10:08
WinMain
На самом деле у элемента SysTabControl32 всего один хэндл - это его собственный. У кажой отдельной страницы нет своего хэндла, есть лишь номера позиции, как в LISTBOX.

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

Добавлено: 11 фев 2008, 10:31
engine
Получается при выборе одной из вкладок мне придется удалять все элементы предыдущего щита и создавать элементы нового щита?

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

Добавлено: 11 фев 2008, 10:42
Romeo
Не удалять, а прятать. Используй ShowWindow(handle, SW_HIDE).

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

Добавлено: 11 фев 2008, 11:44
WinMain
Обычно для каждой страницы формируется отдельное дочернее окно диалога, на котором располагаются все необходимые элементы. Когда страницы переключаются, текущий диалог уничтожается, а другой на его месте создаётся.

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

Добавлено: 11 фев 2008, 12:20
BBB
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);
};

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

Добавлено: 11 фев 2008, 18:09
Duncon
sheet - лист в переводе, ппс куда катится этот мир