Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > ???????CTreeCtrl??????????


Автор: Satana_Claus 25.8.2004, 15:14
В элементе управления CTreeCtrl выделенным (selected) считается элемент, на котором произведен щелчек левой кнопкой мыши. Если щелкнуть правой то рисует выделение на новом элементе, но фактически выделенным остается предыдущий элемент(т.е. функция GetSelectedItem возвращает идентификатор элемента, который был выбран последним пр помощи ЛЕВОЙ кнопки мыши).
Как сделать, чтоб выделение работало одинаково как левой так и ПРАВОЙ кнопкой мыши??????????????

Автор: Олег М 25.8.2004, 15:22
Устанавливай этот элемент выделенным по WM_RBUTTONDOWN

Автор: Satana_Claus 25.8.2004, 15:33
Я имел в виду элемнт дерева, а не сам контрол.
Как я могу выделить элемент дерева, если я не могу понять на каком элемент был произведен щелчек правой кнопкой.
Я сделал контрол CMyTree производный от CTreeCtrl и перопределил обработчик:
void CMyTree::OnRButtonDown(UINT nFlags, CPoint point)
{
CTreeCtrl::OnLButtonDown(nFlags, point);
}
это ничего не дало. Правый щелчок остался правым, хотя вызываю OnLButtonDown

Автор: Олег М 25.8.2004, 15:56
Цитата(Satana_Claus @ 25.8.2004, 18:33)
Я имел в виду элемнт дерева, а не сам контрол.

Я тоже.
Цитата(Satana_Claus @ 25.8.2004, 18:33)
Я сделал контрол CMyTree производный от CTreeCtrl и перопределил обработчик:

Молодец! Только немного не так
Код

void CMyTree::OnRButtonDown(UINT nFlags, CPoint point)
{
HTREEITEM hItem=HitTest(point,NULL);
if (hItem) SelectItem(hItem);
}


Наверное даже будет работать

Автор: Satana_Claus 25.8.2004, 16:17
Tnx.
Все работает!:-)

Автор: Satana_Claus 25.8.2004, 16:42
Теперь проблема с DropDown(CComboBox) контролом.
Перехватил все какие у него есть сообщения:
ON_CBN_EDITCHANGE(IDC_TYPE, OnCbnEditchangeType)
ON_CBN_SELCHANGE(IDC_TYPE, OnCbnSelchangeType)
ON_CBN_CLOSEUP(IDC_TYPE, OnCbnCloseupType)
ON_CBN_KILLFOCUS(IDC_TYPE, OnCbnKillfocusType)
ON_CBN_SELENDOK(IDC_TYPE, OnCbnSelendokType)
В них пытаюсь получить текущую строку
CString str;
GetDlgItem(IDC_TYPE)->GetWindowText(str);
MessageBox(str);
Выводит то, что я выбирал прошлый раз. Текущий текст, который я вижу на кране, получить не могу.
Где тут собака порылась?

Автор: Олег М 25.8.2004, 16:47
Цитата(Satana_Claus @ 25.8.2004, 19:42)
Где тут собака порылась?

Собака порылась в МСДНе. И ты там поищи. В частности, я так понимаю, тебе надо CComboBoх::GetLBText

Автор: Satana_Claus 25.8.2004, 16:53
Контрол не DropDownList, а DropDown. Т.е. есть список, но можно редактировать текст. И мне нужно получить именно тот текст, которыя я вижу в окне редактирования (список уже свернут).
А GetLBText дает строку из выпадающего списка по индексу. Но в моем случае может отображаться строка, которой в списке нет (введена с клавы).

Автор: Олег М 25.8.2004, 17:04
Ну тогда должно работать
Цитата(Satana_Claus @ 25.8.2004, 19:42)
GetDlgItem(IDC_TYPE)->GetWindowText(str);

Покажи код, где ты это вызываешь. И вообще, когда тебе это нужнол вызывать.

Автор: Satana_Claus 25.8.2004, 17:16
Все, догнал.
Я определяю введен ли текст из списка
if(combo->GetCurSel()!=CB_ERR)
combo->GetLBText(combo->GetCurSel(),str);
else
combo->GetWindowText(str);

Спасибо за внимание!:-)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)