V0lt
 
  
  Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Решения:   1.1) выделяем/снимаем выделение для всех дочерних item    Код: CPPageFormats.h   ...       afx_msg void OnTVItemChanged(NMHDR *pNMHDR, LRESULT *pResult);   ...      CPPageFormats.cpp   ...   BEGIN_MESSAGE_MAP(CPPageFormats, CPPageBase)       ON_NOTIFY(TVN_ITEMCHANGED, IDC_TREE1, OnTVItemChanged)   END_MESSAGE_MAP()   ...   void CPPageFormats::OnTVItemChanged(NMHDR *pNMHDR, LRESULT *pResult)//TVN_ITEMCHANGED   {       NMTVITEMCHANGE* p = (NMTVITEMCHANGE*)pNMHDR;       if ((p->uStateOld & 0x1000) && (p->uStateNew & 0x2000))       {           HTREEITEM hChildItem =m_formats.GetChildItem(p->hItem);           while (hChildItem) {               m_formats.SetCheck(hChildItem);               hChildItem = m_formats.GetNextItem(hChildItem, TVGN_NEXT);           }       }       else if ((p->uStateOld & 0x2000) && (p->uStateNew & 0x1000))       {           HTREEITEM hChildItem =m_formats.GetChildItem(p->hItem);           while (hChildItem) {               m_formats.SetCheck(hChildItem, false);               hChildItem = m_formats.GetNextItem(hChildItem, TVGN_NEXT);           }       }   }  |   В справке я не нашел способа как проверять состояние чекбокса, пришлось анализировать uStateOld и uStateNew и изобретать велосипед.      3) принудительно выделяю тот item, по которому кликнули.    Код: CPPageFormats.h   ...       afx_msg void OnTVItemClick(NMHDR *pNMHDR, LRESULT *pResult);   ...      CPPageFormats.cpp   ...   BEGIN_MESSAGE_MAP(CPPageFormats, CPPageBase)       ON_NOTIFY(NM_CLICK, IDC_TREE1, OnTVItemClick)   END_MESSAGE_MAP()   ...   void CPPageFormats::OnTVItemClick(NMHDR *pNMHDR, LRESULT *pResult)//NM_CLICK   {       NM_TREEVIEW* p = (NM_TREEVIEW*)pNMHDR;       m_formats.SelectItem(p->itemNew.hItem);   }  |         4) нашел решение если не работает функция SetCheck   http://www.codeguru.com/forum/showthread.php?t=197692   http://www.rsdn.ru/forum/mfc/588040.1.aspx    Код: //remove and add the checkbox style.   m_ctrlTree.ModifyStyle( TVS_CHECKBOXES, 0 );   m_ctrlTree.ModifyStyle( 0, TVS_CHECKBOXES );  |      чтобы бага не было, нужно сначала убрать а потом вернуть стиль TVS_CHECKBOXES. |   Всего записей: 11272 | Зарегистр. 05-02-2003 | Отправлено:  21:09 09-04-2011  | Исправлено: V0lt,   23:49 10-04-2011    |  
  |