Хэндл щита в таб контроле (SysTabControl32)
Модераторы: Duncon, Hawk, Romeo, Eugie
Как получить хэндл щита в таб контроле?
Добавлять щит умею, а как хэндл получить не понимаю.
Мне хэндл нужен, чтоб динамически размещать на его щите другие контролы.
Добавлять щит умею, а как хэндл получить не понимаю.
Мне хэндл нужен, чтоб динамически размещать на его щите другие контролы.
А че такое щит?
Находишь окно где находится нужный тебе элемент, зптем перебираешь дочерние - вот тебе и хендл..
Находишь окно где находится нужный тебе элемент, зптем перебираешь дочерние - вот тебе и хендл..
Щит(sheet) - это лист, отдельная вкладка, один элемент в таб контроле.Duncon писал(а):А че такое щит?
Можно по подробней. Что за окно? Дочерние чего? Щита?Duncon писал(а):Находишь окно где находится нужный тебе элемент, зптем перебираешь дочерние - вот тебе и хендл..
На самом деле у элемента SysTabControl32 всего один хэндл - это его собственный. У кажой отдельной страницы нет своего хэндла, есть лишь номера позиции, как в LISTBOX.
Получается при выборе одной из вкладок мне придется удалять все элементы предыдущего щита и создавать элементы нового щита?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Не удалять, а прятать. Используй ShowWindow(handle, SW_HIDE).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Обычно для каждой страницы формируется отдельное дочернее окно диалога, на котором располагаются все необходимые элементы. Когда страницы переключаются, текущий диалог уничтожается, а другой на его месте создаётся.
В общем-то, как заметил выше Romeo, лучше не удалять, а HIDE-ить. Чтобы потом при переключении на закладку обратно не создавать вновь.WinMain писал(а):Когда страницы переключаются, текущий диалог уничтожается, а другой на его месте создаётся.
При переключении закладки мышкой в родительское окно 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);
};
sheet - лист в переводе, ппс куда катится этот мир