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


Автор: Rickert 14.7.2006, 09:38
Есть дерево с чекбоксами. Когда нажимаешь на чекбокс, она его отмечает галочкой, а элемент дерева, который соответсвует этому checkbox'у, не выделяет и прыгает выделением на тоот, который был выделен до этог.
Как сделать так, чтобы она выделяла строку, при нажатии на чекбокс? 

Автор: Earnest 14.7.2006, 09:42
Ручками: обрабатывать уведомление об изменении состояния (TVN_STATECHANGE), в случае правильных параметров ставить выделение (SetItemState). 

Автор: Rickert 14.7.2006, 09:55
Правильные параметры - это какие?  

Автор: Rickert 14.7.2006, 10:20
Код

POINT pt_action = {0};

GetCursorPos(&pt_action);
ScreenToClient(&pt_action);
    
HTREEITEM treeItem = HitTest(pt_action);

UINT my = GetItemState(treeItem, 0);

Где список вообще взять возможных флагов? В MSDN только:
Цитата

TVIF_CHILDREN
The cChildren member is valid.
TVIF_DI_SETITEM
The tree-view control will retain the supplied information and will not request it again. This flag is valid only when processing the TVN_GETDISPINFO notification.
TVIF_HANDLE
The hItem member is valid.
TVIF_IMAGE
The iImage member is valid.
TVIF_PARAM
The lParam member is valid.
TVIF_SELECTEDIMAGE
The iSelectedImage member is valid.
TVIF_STATE
The state and stateMask members are valid.
TVIF_TEXT
The pszText and cchTextMax members are valid.
  

Автор: Earnest 14.7.2006, 13:17
Каких флагов? Там по каждому поводу свои флаги. И все описано.
Только вот с TVN_STATECHANGED я тебя обманула, извини, перепутала: нет такого уведомления.
Нужно перехватить нажатие левой кнопки мыши (OnLButtonDown), либо уведомление NM_CLICK. И всегда делать  SetItemState (hItem, TVIS_SELECTED, TVIS_SELECTED); Если будешь обработывать OnLButtonDown - не забудь вызвать стандартную обработку. 

Автор: Rickert 15.7.2006, 17:32
Earnest
При этом ещё нужно будет менять статус того элемента, который был выделен до этого  на "невыделенный", иначе у тебя получиться несколько выделенных элементов. 

Автор: GioTraliVali 16.7.2006, 13:16
Цитата(Rcikert @ 14.7.2006,  09:38)
Есть дерево с чекбоксами. Когда нажимаешь на чекбокс, она его отмечает галочкой, а элемент дерева, который соответсвует этому checkbox'у, не выделяет и прыгает выделением на тоот, который был выделен до этог.
Как сделать так, чтобы она выделяла строку, при нажатии на чекбокс?

Slu6ai voobsheto derevo s chekboxami ne lubluy ia ego ia delau tak!!!
1.beru derevo bez stila chekboxov!!!
2.sozdau bitmap odin s cheknutim vtoroi bez cheknutogo!!!
3 .Etot bitmap podsoedinau k derevu!!!
4 pri dobavlenii ispolzuiu InsertItem(HTREEITEM,image,selImage,HTREEPARITEM)(HTREEPARITEM-eot HTREEITEM -  no ia tak napisal chtob ponial chto eto roditelskii)
5.Pishu funkciu kotoraia peret item i mesto gde cursor bil kliknut i esli na Image to meniau 1 na drugoi image iz nashego privazanogo!!!
6.Pri obrabotke Onclick,OndblClick vizivau etu funkciu

vot i vse. Sorry u menia net doma primerchika esli na rabote naidu u sebia moment gde eto delaetsa to prishlu kod. Udachi!!! 

Автор: Earnest 17.7.2006, 07:33
Цитата(Rcikert @  15.7.2006,  18:32 Найти цитируемый пост)
При этом ещё нужно будет менять статус того элемента, который был выделен до этого  на "невыделенный", иначе у тебя получиться несколько выделенных элементов.  
 Да, конечно. Можно еще попробовать эмулировать "обычный" клик, чуть-чуть сдвинув точку вправо, но я предпочитаю руками поправить состояние... 

GioTraliVali, будь добр, пользуйся транслитом: читать твои посты невозможно...

Добавлено @ 07:39 
Дерево со стилем checkbox - это просто "быстрый" путь использования стандартных state-image'й. 
Из такого дерева можно легко извлечь ImageList со стандартными чек-боксами, можно ему подсунуть свои картинки для чек-боксов, изменить число состояний (добавить неопределенное, например).
Вопрос Rcikert совершенно не о том.  

Автор: GioTraliVali 17.7.2006, 21:17
Цитата(Earnest @ 17.7.2006,  07:33)
Цитата(Rcikert @  15.7.2006,  18:32 Найти цитируемый пост)
При этом ещё нужно будет менять статус того элемента, который был выделен до этого  на "невыделенный", иначе у тебя получиться несколько выделенных элементов.  
 Да, конечно. Можно еще попробовать эмулировать "обычный" клик, чуть-чуть сдвинув точку вправо, но я предпочитаю руками поправить состояние... 

GioTraliVali, будь добр, пользуйся транслитом: читать твои посты невозможно...

Добавлено @ 07:39 
Дерево со стилем checkbox - это просто "быстрый" путь использования стандартных state-image'й. 
Из такого дерева можно легко извлечь ImageList со стандартными чек-боксами, можно ему подсунуть свои картинки для чек-боксов, изменить число состояний (добавить неопределенное, например).
Вопрос Rcikert совершенно не о том.

нe читаи тебя никто не просит.я никогда нe пишу то, что сам нa практикe не проeрял и потом исползовал во многих програмах.так что твоего перевода человеку кому я обяснял не нujen.вопрос как раз об етом.мнe вообщето пофиг.я подал совет.а осталное ваше дело!!!! 

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