UITreeView.cpp 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283
  1. #include "StdAfx.h"
  2. #include "UITreeView.h"
  3. #pragma warning( disable: 4251 )
  4. namespace DuiLib
  5. {
  6. //************************************
  7. // 函数名称: CTreeNodeUI
  8. // 返回类型:
  9. // 参数信息: CTreeNodeUI * _ParentNode
  10. // 函数说明:
  11. //************************************
  12. CTreeNodeUI::CTreeNodeUI( CTreeNodeUI* _ParentNode /*= NULL*/ )
  13. {
  14. m_dwItemTextColor = 0x00000000;
  15. m_dwItemHotTextColor = 0;
  16. m_dwSelItemTextColor = 0;
  17. m_dwSelItemHotTextColor = 0;
  18. pTreeView = NULL;
  19. m_bIsVisable = true;
  20. m_bIsCheckBox = false;
  21. pParentTreeNode = NULL;
  22. pHoriz = new CHorizontalLayoutUI();
  23. pFolderButton = new CCheckBoxUI();
  24. pDottedLine = new CLabelUI();
  25. pCheckBox = new CCheckBoxUI();
  26. pItemButton = new COptionUI();
  27. this->SetFixedHeight(18);
  28. this->SetFixedWidth(250);
  29. pFolderButton->SetFixedWidth(GetFixedHeight());
  30. pDottedLine->SetFixedWidth(2);
  31. pCheckBox->SetFixedWidth(GetFixedHeight());
  32. pItemButton->SetAttribute(_T("align"),_T("left"));
  33. pDottedLine->SetVisible(false);
  34. pCheckBox->SetVisible(false);
  35. pItemButton->SetMouseEnabled(false);
  36. if(_ParentNode)
  37. {
  38. if (_tcsicmp(_ParentNode->GetClass(), _T("TreeNodeUI")) != 0)
  39. return;
  40. pDottedLine->SetVisible(_ParentNode->IsVisible());
  41. pDottedLine->SetFixedWidth(_ParentNode->GetDottedLine()->GetFixedWidth()+16);
  42. this->SetParentNode(_ParentNode);
  43. }
  44. pHoriz->Add(pDottedLine);
  45. pHoriz->Add(pFolderButton);
  46. pHoriz->Add(pCheckBox);
  47. pHoriz->Add(pItemButton);
  48. Add(pHoriz);
  49. }
  50. //************************************
  51. // 函数名称: ~CTreeNodeUI
  52. // 返回类型:
  53. // 参数信息: void
  54. // 函数说明:
  55. //************************************
  56. CTreeNodeUI::~CTreeNodeUI( void )
  57. {
  58. }
  59. //************************************
  60. // 函数名称: GetClass
  61. // 返回类型: LPCTSTR
  62. // 函数说明:
  63. //************************************
  64. LPCTSTR CTreeNodeUI::GetClass() const
  65. {
  66. return _T("TreeNodeUI");
  67. }
  68. //************************************
  69. // 函数名称: GetInterface
  70. // 返回类型: LPVOID
  71. // 参数信息: LPCTSTR pstrName
  72. // 函数说明:
  73. //************************************
  74. LPVOID CTreeNodeUI::GetInterface( LPCTSTR pstrName )
  75. {
  76. if( _tcscmp(pstrName, _T("TreeNode")) == 0 )
  77. return static_cast<CTreeNodeUI*>(this);
  78. return CListContainerElementUI::GetInterface(pstrName);
  79. }
  80. //************************************
  81. // 函数名称: DoEvent
  82. // 返回类型: void
  83. // 参数信息: TEventUI & event
  84. // 函数说明:
  85. //************************************
  86. void CTreeNodeUI::DoEvent( TEventUI& event )
  87. {
  88. if( !IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND ) {
  89. if( m_pOwner != NULL ) m_pOwner->DoEvent(event);
  90. else CContainerUI::DoEvent(event);
  91. return;
  92. }
  93. CListContainerElementUI::DoEvent(event);
  94. if( event.Type == UIEVENT_DBLCLICK )
  95. {
  96. if( IsEnabled() ) {
  97. m_pManager->SendNotify(this, _T("itemdbclick"));
  98. Invalidate();
  99. }
  100. return;
  101. }
  102. if( event.Type == UIEVENT_MOUSEENTER )
  103. {
  104. if( IsEnabled()) {
  105. if(m_bSelected && GetSelItemHotTextColor())
  106. pItemButton->SetTextColor(GetSelItemHotTextColor());
  107. else
  108. pItemButton->SetTextColor(GetItemHotTextColor());
  109. }
  110. else
  111. pItemButton->SetTextColor(pItemButton->GetDisabledTextColor());
  112. return;
  113. }
  114. if( event.Type == UIEVENT_MOUSELEAVE )
  115. {
  116. if( IsEnabled()) {
  117. if(m_bSelected && GetSelItemTextColor())
  118. pItemButton->SetTextColor(GetSelItemTextColor());
  119. else if(!m_bSelected)
  120. pItemButton->SetTextColor(GetItemTextColor());
  121. }
  122. else
  123. pItemButton->SetTextColor(pItemButton->GetDisabledTextColor());
  124. return;
  125. }
  126. }
  127. //************************************
  128. // 函数名称: Invalidate
  129. // 返回类型: void
  130. // 函数说明:
  131. //************************************
  132. void CTreeNodeUI::Invalidate()
  133. {
  134. if( !IsVisible() )
  135. return;
  136. if( GetParent() ) {
  137. CContainerUI* pParentContainer = static_cast<CContainerUI*>(GetParent()->GetInterface(_T("Container")));
  138. if( pParentContainer ) {
  139. RECT rc = pParentContainer->GetPos();
  140. RECT rcInset = pParentContainer->GetInset();
  141. rc.left += rcInset.left;
  142. rc.top += rcInset.top;
  143. rc.right -= rcInset.right;
  144. rc.bottom -= rcInset.bottom;
  145. CScrollBarUI* pVerticalScrollBar = pParentContainer->GetVerticalScrollBar();
  146. if( pVerticalScrollBar && pVerticalScrollBar->IsVisible() ) rc.right -= pVerticalScrollBar->GetFixedWidth();
  147. CScrollBarUI* pHorizontalScrollBar = pParentContainer->GetHorizontalScrollBar();
  148. if( pHorizontalScrollBar && pHorizontalScrollBar->IsVisible() ) rc.bottom -= pHorizontalScrollBar->GetFixedHeight();
  149. RECT invalidateRc = m_rcItem;
  150. if( !::IntersectRect(&invalidateRc, &m_rcItem, &rc) )
  151. return;
  152. CControlUI* pParent = GetParent();
  153. RECT rcTemp;
  154. RECT rcParent;
  155. while( pParent = pParent->GetParent() )
  156. {
  157. rcTemp = invalidateRc;
  158. rcParent = pParent->GetPos();
  159. if( !::IntersectRect(&invalidateRc, &rcTemp, &rcParent) )
  160. return;
  161. }
  162. if( m_pManager != NULL ) m_pManager->Invalidate(invalidateRc);
  163. }
  164. else {
  165. CContainerUI::Invalidate();
  166. }
  167. }
  168. else {
  169. CContainerUI::Invalidate();
  170. }
  171. }
  172. //************************************
  173. // 函数名称: Select
  174. // 返回类型: bool
  175. // 参数信息: bool bSelect
  176. // 函数说明:
  177. //************************************
  178. bool CTreeNodeUI::Select( bool bSelect /*= true*/, bool bTriggerEvent)
  179. {
  180. bool nRet = CListContainerElementUI::Select(bSelect, bTriggerEvent);
  181. if(m_bSelected)
  182. pItemButton->SetTextColor(GetSelItemTextColor());
  183. else
  184. pItemButton->SetTextColor(GetItemTextColor());
  185. return nRet;
  186. }
  187. //************************************
  188. // 函数名称: Add
  189. // 返回类型: bool
  190. // 参数信息: CControlUI * _pTreeNodeUI
  191. // 函数说明: 通过节点对象添加节点
  192. //************************************
  193. bool CTreeNodeUI::Add( CControlUI* _pTreeNodeUI )
  194. {
  195. if (_tcsicmp(_pTreeNodeUI->GetClass(), _T("TreeNodeUI")) == 0)
  196. return AddChildNode((CTreeNodeUI*)_pTreeNodeUI);
  197. return CListContainerElementUI::Add(_pTreeNodeUI);
  198. }
  199. //************************************
  200. // 函数名称: AddAt
  201. // 返回类型: bool
  202. // 参数信息: CControlUI * pControl
  203. // 参数信息: int iIndex 该参数仅针对当前节点下的兄弟索引,并非列表视图索引
  204. // 函数说明:
  205. //************************************
  206. bool CTreeNodeUI::AddAt( CControlUI* pControl, int iIndex )
  207. {
  208. if(NULL == static_cast<CTreeNodeUI*>(pControl->GetInterface(_T("TreeNode"))))
  209. return false;
  210. CTreeNodeUI* pIndexNode = static_cast<CTreeNodeUI*>(mTreeNodes.GetAt(iIndex));
  211. if(!pIndexNode){
  212. if(!mTreeNodes.Add(pControl))
  213. return false;
  214. }
  215. else if(pIndexNode && !mTreeNodes.InsertAt(iIndex,pControl))
  216. return false;
  217. if(!pIndexNode && pTreeView && pTreeView->GetItemAt(GetTreeIndex()+1))
  218. pIndexNode = static_cast<CTreeNodeUI*>(pTreeView->GetItemAt(GetTreeIndex()+1)->GetInterface(_T("TreeNode")));
  219. pControl = CalLocation((CTreeNodeUI*)pControl);
  220. if(pTreeView && pIndexNode)
  221. return pTreeView->AddAt((CTreeNodeUI*)pControl,pIndexNode);
  222. else
  223. return pTreeView->Add((CTreeNodeUI*)pControl);
  224. return true;
  225. }
  226. //************************************
  227. // 函数名称: Remove
  228. // 返回类型: bool
  229. // 参数信息: CControlUI * pControl
  230. // 函数说明:
  231. //************************************
  232. bool CTreeNodeUI::Remove( CControlUI* pControl )
  233. {
  234. return RemoveAt((CTreeNodeUI*)pControl);
  235. }
  236. //************************************
  237. // 函数名称: SetVisibleTag
  238. // 返回类型: void
  239. // 参数信息: bool _IsVisible
  240. // 函数说明:
  241. //************************************
  242. void CTreeNodeUI::SetVisibleTag( bool _IsVisible )
  243. {
  244. m_bIsVisable = _IsVisible;
  245. }
  246. //************************************
  247. // 函数名称: GetVisibleTag
  248. // 返回类型: bool
  249. // 函数说明:
  250. //************************************
  251. bool CTreeNodeUI::GetVisibleTag()
  252. {
  253. return m_bIsVisable;
  254. }
  255. //************************************
  256. // 函数名称: SetItemText
  257. // 返回类型: void
  258. // 参数信息: LPCTSTR pstrValue
  259. // 函数说明:
  260. //************************************
  261. void CTreeNodeUI::SetItemText( LPCTSTR pstrValue )
  262. {
  263. pItemButton->SetText(pstrValue);
  264. }
  265. //************************************
  266. // 函数名称: GetItemText
  267. // 返回类型: UiLib::CDuiString
  268. // 函数说明:
  269. //************************************
  270. CDuiString CTreeNodeUI::GetItemText()
  271. {
  272. return pItemButton->GetText();
  273. }
  274. //************************************
  275. // 函数名称: CheckBoxSelected
  276. // 返回类型: void
  277. // 参数信息: bool _Selected
  278. // 函数说明:
  279. //************************************
  280. void CTreeNodeUI::CheckBoxSelected( bool _Selected )
  281. {
  282. pCheckBox->Selected(_Selected);
  283. }
  284. //************************************
  285. // 函数名称: IsCheckBoxSelected
  286. // 返回类型: bool
  287. // 函数说明:
  288. //************************************
  289. bool CTreeNodeUI::IsCheckBoxSelected() const
  290. {
  291. return pCheckBox->IsSelected();
  292. }
  293. //************************************
  294. // 函数名称: IsHasChild
  295. // 返回类型: bool
  296. // 函数说明:
  297. //************************************
  298. bool CTreeNodeUI::IsHasChild() const
  299. {
  300. return !mTreeNodes.IsEmpty();
  301. }
  302. //************************************
  303. // 函数名称: AddChildNode
  304. // 返回类型: bool
  305. // 参数信息: CTreeNodeUI * _pTreeNodeUI
  306. // 函数说明:
  307. //************************************
  308. bool CTreeNodeUI::AddChildNode( CTreeNodeUI* _pTreeNodeUI )
  309. {
  310. if (!_pTreeNodeUI)
  311. return false;
  312. if (_tcsicmp(_pTreeNodeUI->GetClass(), _T("TreeNodeUI")) != 0)
  313. return false;
  314. _pTreeNodeUI = CalLocation(_pTreeNodeUI);
  315. bool nRet = true;
  316. if(pTreeView){
  317. CTreeNodeUI* pNode = static_cast<CTreeNodeUI*>(mTreeNodes.GetAt(mTreeNodes.GetSize()-1));
  318. if(!pNode || !pNode->GetLastNode())
  319. nRet = pTreeView->AddAt(_pTreeNodeUI,GetTreeIndex()+1) >= 0;
  320. else nRet = pTreeView->AddAt(_pTreeNodeUI,pNode->GetLastNode()->GetTreeIndex()+1) >= 0;
  321. }
  322. if(nRet)
  323. mTreeNodes.Add(_pTreeNodeUI);
  324. return nRet;
  325. }
  326. //************************************
  327. // 函数名称: RemoveAt
  328. // 返回类型: bool
  329. // 参数信息: CTreeNodeUI * _pTreeNodeUI
  330. // 函数说明:
  331. //************************************
  332. bool CTreeNodeUI::RemoveAt( CTreeNodeUI* _pTreeNodeUI )
  333. {
  334. int nIndex = mTreeNodes.Find(_pTreeNodeUI);
  335. CTreeNodeUI* pNode = static_cast<CTreeNodeUI*>(mTreeNodes.GetAt(nIndex));
  336. if(pNode && pNode == _pTreeNodeUI)
  337. {
  338. while(pNode->IsHasChild())
  339. pNode->RemoveAt(static_cast<CTreeNodeUI*>(pNode->mTreeNodes.GetAt(0)));
  340. mTreeNodes.Remove(nIndex);
  341. if(pTreeView)
  342. pTreeView->Remove(_pTreeNodeUI);
  343. return true;
  344. }
  345. return false;
  346. }
  347. //************************************
  348. // 函数名称: SetParentNode
  349. // 返回类型: void
  350. // 参数信息: CTreeNodeUI * _pParentTreeNode
  351. // 函数说明:
  352. //************************************
  353. void CTreeNodeUI::SetParentNode( CTreeNodeUI* _pParentTreeNode )
  354. {
  355. pParentTreeNode = _pParentTreeNode;
  356. }
  357. //************************************
  358. // 函数名称: GetParentNode
  359. // 返回类型: CTreeNodeUI*
  360. // 函数说明:
  361. //************************************
  362. CTreeNodeUI* CTreeNodeUI::GetParentNode()
  363. {
  364. return pParentTreeNode;
  365. }
  366. //************************************
  367. // 函数名称: GetCountChild
  368. // 返回类型: long
  369. // 函数说明:
  370. //************************************
  371. long CTreeNodeUI::GetCountChild()
  372. {
  373. return mTreeNodes.GetSize();
  374. }
  375. //************************************
  376. // 函数名称: SetTreeView
  377. // 返回类型: void
  378. // 参数信息: CTreeViewUI * _CTreeViewUI
  379. // 函数说明:
  380. //************************************
  381. void CTreeNodeUI::SetTreeView( CTreeViewUI* _CTreeViewUI )
  382. {
  383. pTreeView = _CTreeViewUI;
  384. }
  385. //************************************
  386. // 函数名称: GetTreeView
  387. // 返回类型: CTreeViewUI*
  388. // 函数说明:
  389. //************************************
  390. CTreeViewUI* CTreeNodeUI::GetTreeView()
  391. {
  392. return pTreeView;
  393. }
  394. //************************************
  395. // 函数名称: SetAttribute
  396. // 返回类型: void
  397. // 参数信息: LPCTSTR pstrName
  398. // 参数信息: LPCTSTR pstrValue
  399. // 函数说明:
  400. //************************************
  401. void CTreeNodeUI::SetAttribute( LPCTSTR pstrName, LPCTSTR pstrValue )
  402. {
  403. if(_tcscmp(pstrName, _T("text")) == 0 )
  404. pItemButton->SetText(pstrValue);
  405. else if(_tcscmp(pstrName, _T("horizattr")) == 0 )
  406. pHoriz->ApplyAttributeList(pstrValue);
  407. else if(_tcscmp(pstrName, _T("dotlineattr")) == 0 )
  408. pDottedLine->ApplyAttributeList(pstrValue);
  409. else if(_tcscmp(pstrName, _T("folderattr")) == 0 )
  410. pFolderButton->ApplyAttributeList(pstrValue);
  411. else if(_tcscmp(pstrName, _T("checkboxattr")) == 0 )
  412. pCheckBox->ApplyAttributeList(pstrValue);
  413. else if(_tcscmp(pstrName, _T("itemattr")) == 0 )
  414. pItemButton->ApplyAttributeList(pstrValue);
  415. else if(_tcscmp(pstrName, _T("itemtextcolor")) == 0 ){
  416. if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
  417. LPTSTR pstr = NULL;
  418. DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
  419. SetItemTextColor(clrColor);
  420. }
  421. else if(_tcscmp(pstrName, _T("itemhottextcolor")) == 0 ){
  422. if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
  423. LPTSTR pstr = NULL;
  424. DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
  425. SetItemHotTextColor(clrColor);
  426. }
  427. else if(_tcscmp(pstrName, _T("selitemtextcolor")) == 0 ){
  428. if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
  429. LPTSTR pstr = NULL;
  430. DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
  431. SetSelItemTextColor(clrColor);
  432. }
  433. else if(_tcscmp(pstrName, _T("selitemhottextcolor")) == 0 ){
  434. if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
  435. LPTSTR pstr = NULL;
  436. DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
  437. SetSelItemHotTextColor(clrColor);
  438. }
  439. else CListContainerElementUI::SetAttribute(pstrName,pstrValue);
  440. }
  441. //************************************
  442. // 函数名称: GetTreeNodes
  443. // 返回类型: UiLib::CStdPtrArray
  444. // 函数说明:
  445. //************************************
  446. CStdPtrArray CTreeNodeUI::GetTreeNodes()
  447. {
  448. return mTreeNodes;
  449. }
  450. //************************************
  451. // 函数名称: GetChildNode
  452. // 返回类型: CTreeNodeUI*
  453. // 参数信息: int _nIndex
  454. // 函数说明:
  455. //************************************
  456. CTreeNodeUI* CTreeNodeUI::GetChildNode( int _nIndex )
  457. {
  458. return static_cast<CTreeNodeUI*>(mTreeNodes.GetAt(_nIndex));
  459. }
  460. //************************************
  461. // 函数名称: SetVisibleFolderBtn
  462. // 返回类型: void
  463. // 参数信息: bool _IsVisibled
  464. // 函数说明:
  465. //************************************
  466. void CTreeNodeUI::SetVisibleFolderBtn( bool _IsVisibled )
  467. {
  468. pFolderButton->SetVisible(_IsVisibled);
  469. }
  470. //************************************
  471. // 函数名称: GetVisibleFolderBtn
  472. // 返回类型: bool
  473. // 函数说明:
  474. //************************************
  475. bool CTreeNodeUI::GetVisibleFolderBtn()
  476. {
  477. return pFolderButton->IsVisible();
  478. }
  479. //************************************
  480. // 函数名称: SetVisibleCheckBtn
  481. // 返回类型: void
  482. // 参数信息: bool _IsVisibled
  483. // 函数说明:
  484. //************************************
  485. void CTreeNodeUI::SetVisibleCheckBtn( bool _IsVisibled )
  486. {
  487. pCheckBox->SetVisible(_IsVisibled);
  488. }
  489. //************************************
  490. // 函数名称: GetVisibleCheckBtn
  491. // 返回类型: bool
  492. // 函数说明:
  493. //************************************
  494. bool CTreeNodeUI::GetVisibleCheckBtn()
  495. {
  496. return pCheckBox->IsVisible();
  497. }
  498. //************************************
  499. // 函数名称: GetNodeIndex
  500. // 返回类型: int
  501. // 函数说明: 取得全局树视图的索引
  502. //************************************
  503. int CTreeNodeUI::GetTreeIndex()
  504. {
  505. if(!pTreeView)
  506. return -1;
  507. for(int nIndex = 0;nIndex < pTreeView->GetCount();nIndex++){
  508. if(this == pTreeView->GetItemAt(nIndex))
  509. return nIndex;
  510. }
  511. return -1;
  512. }
  513. //************************************
  514. // 函数名称: GetNodeIndex
  515. // 返回类型: int
  516. // 函数说明: 取得相对于兄弟节点的当前索引
  517. //************************************
  518. int CTreeNodeUI::GetNodeIndex()
  519. {
  520. if(!GetParentNode() && !pTreeView)
  521. return -1;
  522. if(!GetParentNode() && pTreeView)
  523. return GetTreeIndex();
  524. return GetParentNode()->GetTreeNodes().Find(this);
  525. }
  526. //************************************
  527. // 函数名称: GetLastNode
  528. // 返回类型: CTreeNodeUI*
  529. // 函数说明:
  530. //************************************
  531. CTreeNodeUI* CTreeNodeUI::GetLastNode( )
  532. {
  533. if(!IsHasChild())
  534. return this;
  535. CTreeNodeUI* nRetNode = NULL;
  536. for(int nIndex = 0;nIndex < GetTreeNodes().GetSize();nIndex++){
  537. CTreeNodeUI* pNode = static_cast<CTreeNodeUI*>(GetTreeNodes().GetAt(nIndex));
  538. if(!pNode)
  539. continue;
  540. CDuiString aa = pNode->GetItemText();
  541. if(pNode->IsHasChild())
  542. nRetNode = pNode->GetLastNode();
  543. else
  544. nRetNode = pNode;
  545. }
  546. return nRetNode;
  547. }
  548. //************************************
  549. // 函数名称: CalLocation
  550. // 返回类型: CTreeNodeUI*
  551. // 参数信息: CTreeNodeUI * _pTreeNodeUI
  552. // 函数说明: 缩进计算
  553. //************************************
  554. CTreeNodeUI* CTreeNodeUI::CalLocation( CTreeNodeUI* _pTreeNodeUI )
  555. {
  556. _pTreeNodeUI->GetDottedLine()->SetVisible(true);
  557. _pTreeNodeUI->GetDottedLine()->SetFixedWidth(pDottedLine->GetFixedWidth()+16);
  558. _pTreeNodeUI->SetParentNode(this);
  559. _pTreeNodeUI->GetItemButton()->SetGroup(pItemButton->GetGroup());
  560. _pTreeNodeUI->SetTreeView(pTreeView);
  561. return _pTreeNodeUI;
  562. }
  563. //************************************
  564. // 函数名称: SetTextColor
  565. // 返回类型: void
  566. // 参数信息: DWORD _dwTextColor
  567. // 函数说明:
  568. //************************************
  569. void CTreeNodeUI::SetItemTextColor( DWORD _dwItemTextColor )
  570. {
  571. m_dwItemTextColor = _dwItemTextColor;
  572. pItemButton->SetTextColor(m_dwItemTextColor);
  573. }
  574. //************************************
  575. // 函数名称: GetTextColor
  576. // 返回类型: DWORD
  577. // 函数说明:
  578. //************************************
  579. DWORD CTreeNodeUI::GetItemTextColor() const
  580. {
  581. return m_dwItemTextColor;
  582. }
  583. //************************************
  584. // 函数名称: SetTextHotColor
  585. // 返回类型: void
  586. // 参数信息: DWORD _dwTextHotColor
  587. // 函数说明:
  588. //************************************
  589. void CTreeNodeUI::SetItemHotTextColor( DWORD _dwItemHotTextColor )
  590. {
  591. m_dwItemHotTextColor = _dwItemHotTextColor;
  592. Invalidate();
  593. }
  594. //************************************
  595. // 函数名称: GetTextHotColor
  596. // 返回类型: DWORD
  597. // 函数说明:
  598. //************************************
  599. DWORD CTreeNodeUI::GetItemHotTextColor() const
  600. {
  601. return m_dwItemHotTextColor;
  602. }
  603. //************************************
  604. // 函数名称: SetSelItemTextColor
  605. // 返回类型: void
  606. // 参数信息: DWORD _dwSelItemTextColor
  607. // 函数说明:
  608. //************************************
  609. void CTreeNodeUI::SetSelItemTextColor( DWORD _dwSelItemTextColor )
  610. {
  611. m_dwSelItemTextColor = _dwSelItemTextColor;
  612. Invalidate();
  613. }
  614. //************************************
  615. // 函数名称: GetSelItemTextColor
  616. // 返回类型: DWORD
  617. // 函数说明:
  618. //************************************
  619. DWORD CTreeNodeUI::GetSelItemTextColor() const
  620. {
  621. return m_dwSelItemTextColor;
  622. }
  623. //************************************
  624. // 函数名称: SetSelHotItemTextColor
  625. // 返回类型: void
  626. // 参数信息: DWORD _dwSelHotItemTextColor
  627. // 函数说明:
  628. //************************************
  629. void CTreeNodeUI::SetSelItemHotTextColor( DWORD _dwSelHotItemTextColor )
  630. {
  631. m_dwSelItemHotTextColor = _dwSelHotItemTextColor;
  632. Invalidate();
  633. }
  634. //************************************
  635. // 函数名称: GetSelHotItemTextColor
  636. // 返回类型: DWORD
  637. // 函数说明:
  638. //************************************
  639. DWORD CTreeNodeUI::GetSelItemHotTextColor() const
  640. {
  641. return m_dwSelItemHotTextColor;
  642. }
  643. /*****************************************************************************/
  644. /*****************************************************************************/
  645. /*****************************************************************************/
  646. //************************************
  647. // 函数名称: CTreeViewUI
  648. // 返回类型:
  649. // 参数信息: void
  650. // 函数说明:
  651. //************************************
  652. CTreeViewUI::CTreeViewUI( void ) : m_bVisibleFolderBtn(true),m_bVisibleCheckBtn(false),m_uItemMinWidth(0)
  653. {
  654. this->GetHeader()->SetVisible(false);
  655. }
  656. //************************************
  657. // 函数名称: ~CTreeViewUI
  658. // 返回类型:
  659. // 参数信息: void
  660. // 函数说明:
  661. //************************************
  662. CTreeViewUI::~CTreeViewUI( void )
  663. {
  664. }
  665. //************************************
  666. // 函数名称: GetClass
  667. // 返回类型: LPCTSTR
  668. // 函数说明:
  669. //************************************
  670. LPCTSTR CTreeViewUI::GetClass() const
  671. {
  672. return _T("TreeViewUI");
  673. }
  674. //************************************
  675. // 函数名称: GetInterface
  676. // 返回类型: LPVOID
  677. // 参数信息: LPCTSTR pstrName
  678. // 函数说明:
  679. //************************************
  680. LPVOID CTreeViewUI::GetInterface( LPCTSTR pstrName )
  681. {
  682. if( _tcscmp(pstrName, _T("TreeView")) == 0 ) return static_cast<CTreeViewUI*>(this);
  683. return CListUI::GetInterface(pstrName);
  684. }
  685. //************************************
  686. // 函数名称: Add
  687. // 返回类型: bool
  688. // 参数信息: CTreeNodeUI * pControl
  689. // 函数说明:
  690. //************************************
  691. bool CTreeViewUI::Add( CTreeNodeUI* pControl )
  692. {
  693. if (!pControl)
  694. return false;
  695. if (_tcsicmp(pControl->GetClass(), _T("TreeNodeUI")) != 0)
  696. return false;
  697. pControl->OnNotify += MakeDelegate(this,&CTreeViewUI::OnDBClickItem);
  698. pControl->GetFolderButton()->OnNotify += MakeDelegate(this,&CTreeViewUI::OnFolderChanged);
  699. pControl->GetCheckBox()->OnNotify += MakeDelegate(this,&CTreeViewUI::OnCheckBoxChanged);
  700. pControl->SetVisibleFolderBtn(m_bVisibleFolderBtn);
  701. pControl->SetVisibleCheckBtn(m_bVisibleCheckBtn);
  702. if(m_uItemMinWidth > 0)
  703. pControl->SetMinWidth(m_uItemMinWidth);
  704. CListUI::Add(pControl);
  705. if(pControl->GetCountChild() > 0)
  706. {
  707. int nCount = pControl->GetCountChild();
  708. for(int nIndex = 0;nIndex < nCount;nIndex++)
  709. {
  710. CTreeNodeUI* pNode = pControl->GetChildNode(nIndex);
  711. if(pNode)
  712. Add(pNode);
  713. }
  714. }
  715. pControl->SetTreeView(this);
  716. return true;
  717. }
  718. //************************************
  719. // 函数名称: AddAt
  720. // 返回类型: long
  721. // 参数信息: CTreeNodeUI * pControl
  722. // 参数信息: int iIndex
  723. // 函数说明: 该方法不会将待插入的节点进行缩位处理,若打算插入的节点为非根节点,请使用AddAt(CTreeNodeUI* pControl,CTreeNodeUI* _IndexNode) 方法
  724. //************************************
  725. long CTreeViewUI::AddAt( CTreeNodeUI* pControl, int iIndex )
  726. {
  727. if (!pControl)
  728. return -1;
  729. if (_tcsicmp(pControl->GetClass(), _T("TreeNodeUI")) != 0)
  730. return -1;
  731. CTreeNodeUI* pParent = static_cast<CTreeNodeUI*>(GetItemAt(iIndex));
  732. if(!pParent)
  733. return -1;
  734. pControl->OnNotify += MakeDelegate(this,&CTreeViewUI::OnDBClickItem);
  735. pControl->GetFolderButton()->OnNotify += MakeDelegate(this,&CTreeViewUI::OnFolderChanged);
  736. pControl->GetCheckBox()->OnNotify += MakeDelegate(this,&CTreeViewUI::OnCheckBoxChanged);
  737. pControl->SetVisibleFolderBtn(m_bVisibleFolderBtn);
  738. pControl->SetVisibleCheckBtn(m_bVisibleCheckBtn);
  739. if(m_uItemMinWidth > 0)
  740. pControl->SetMinWidth(m_uItemMinWidth);
  741. CListUI::AddAt(pControl,iIndex);
  742. if(pControl->GetCountChild() > 0)
  743. {
  744. int nCount = pControl->GetCountChild();
  745. for(int nIndex = 0;nIndex < nCount;nIndex++)
  746. {
  747. CTreeNodeUI* pNode = pControl->GetChildNode(nIndex);
  748. if(pNode)
  749. return AddAt(pNode,iIndex+1);
  750. }
  751. }
  752. else
  753. return iIndex+1;
  754. return -1;
  755. }
  756. //************************************
  757. // 函数名称: AddAt
  758. // 返回类型: bool
  759. // 参数信息: CTreeNodeUI * pControl
  760. // 参数信息: CTreeNodeUI * _IndexNode
  761. // 函数说明:
  762. //************************************
  763. bool CTreeViewUI::AddAt( CTreeNodeUI* pControl,CTreeNodeUI* _IndexNode )
  764. {
  765. if(!_IndexNode && !pControl)
  766. return false;
  767. int nItemIndex = -1;
  768. for(int nIndex = 0;nIndex < GetCount();nIndex++){
  769. if(_IndexNode == GetItemAt(nIndex)){
  770. nItemIndex = nIndex;
  771. break;
  772. }
  773. }
  774. if(nItemIndex == -1)
  775. return false;
  776. return AddAt(pControl,nItemIndex) >= 0;
  777. }
  778. //************************************
  779. // 函数名称: Remove
  780. // 返回类型: bool
  781. // 参数信息: CTreeNodeUI * pControl
  782. // 函数说明: pControl 对象以及下的所有节点将被一并移除
  783. //************************************
  784. bool CTreeViewUI::Remove( CTreeNodeUI* pControl )
  785. {
  786. if(pControl->GetCountChild() > 0)
  787. {
  788. int nCount = pControl->GetCountChild();
  789. for(int nIndex = 0;nIndex < nCount;nIndex++)
  790. {
  791. CTreeNodeUI* pNode = pControl->GetChildNode(nIndex);
  792. if(pNode){
  793. pControl->Remove(pNode);
  794. }
  795. }
  796. }
  797. CListUI::Remove(pControl);
  798. return true;
  799. }
  800. //************************************
  801. // 函数名称: RemoveAt
  802. // 返回类型: bool
  803. // 参数信息: int iIndex
  804. // 函数说明: iIndex 索引以及下的所有节点将被一并移除
  805. //************************************
  806. bool CTreeViewUI::RemoveAt( int iIndex )
  807. {
  808. CTreeNodeUI* pItem = (CTreeNodeUI*)GetItemAt(iIndex);
  809. if(pItem->GetCountChild())
  810. Remove(pItem);
  811. return true;
  812. }
  813. void CTreeViewUI::RemoveAll()
  814. {
  815. CListUI::RemoveAll();
  816. }
  817. //************************************
  818. // 函数名称: Notify
  819. // 返回类型: void
  820. // 参数信息: TNotifyUI & msg
  821. // 函数说明:
  822. //************************************
  823. void CTreeViewUI::Notify( TNotifyUI& msg )
  824. {
  825. }
  826. //************************************
  827. // 函数名称: OnCheckBoxChanged
  828. // 返回类型: bool
  829. // 参数信息: void * param
  830. // 函数说明:
  831. //************************************
  832. bool CTreeViewUI::OnCheckBoxChanged( void* param )
  833. {
  834. TNotifyUI* pMsg = (TNotifyUI*)param;
  835. if(pMsg->sType == _T("selectchanged"))
  836. {
  837. CCheckBoxUI* pCheckBox = (CCheckBoxUI*)pMsg->pSender;
  838. CTreeNodeUI* pItem = (CTreeNodeUI*)pCheckBox->GetParent()->GetParent();
  839. SetItemCheckBox(pCheckBox->GetCheck(),pItem);
  840. return true;
  841. }
  842. return true;
  843. }
  844. //************************************
  845. // 函数名称: OnFolderChanged
  846. // 返回类型: bool
  847. // 参数信息: void * param
  848. // 函数说明:
  849. //************************************
  850. bool CTreeViewUI::OnFolderChanged( void* param )
  851. {
  852. TNotifyUI* pMsg = (TNotifyUI*)param;
  853. if(pMsg->sType == _T("selectchanged"))
  854. {
  855. CCheckBoxUI* pFolder = (CCheckBoxUI*)pMsg->pSender;
  856. CTreeNodeUI* pItem = (CTreeNodeUI*)pFolder->GetParent()->GetParent();
  857. pItem->SetVisibleTag(!pFolder->GetCheck());
  858. SetItemExpand(!pFolder->GetCheck(),pItem);
  859. return true;
  860. }
  861. return true;
  862. }
  863. //************************************
  864. // 函数名称: OnDBClickItem
  865. // 返回类型: bool
  866. // 参数信息: void * param
  867. // 函数说明:
  868. //************************************
  869. bool CTreeViewUI::OnDBClickItem( void* param )
  870. {
  871. TNotifyUI* pMsg = (TNotifyUI*)param;
  872. if(pMsg->sType == _T("itemdbclick"))
  873. {
  874. CTreeNodeUI* pItem = static_cast<CTreeNodeUI*>(pMsg->pSender);
  875. CCheckBoxUI* pFolder = pItem->GetFolderButton();
  876. pFolder->Selected(!pFolder->IsSelected());
  877. pItem->SetVisibleTag(!pFolder->GetCheck());
  878. SetItemExpand(!pFolder->GetCheck(),pItem);
  879. return true;
  880. }
  881. return false;
  882. }
  883. //************************************
  884. // 函数名称: SetItemCheckBox
  885. // 返回类型: bool
  886. // 参数信息: bool _Selected
  887. // 参数信息: CTreeNodeUI * _TreeNode
  888. // 函数说明:
  889. //************************************
  890. bool CTreeViewUI::SetItemCheckBox( bool _Selected,CTreeNodeUI* _TreeNode /*= NULL*/ )
  891. {
  892. if(_TreeNode)
  893. {
  894. if(_TreeNode->GetCountChild() > 0)
  895. {
  896. int nCount = _TreeNode->GetCountChild();
  897. for(int nIndex = 0;nIndex < nCount;nIndex++)
  898. {
  899. CTreeNodeUI* pItem = _TreeNode->GetChildNode(nIndex);
  900. pItem->GetCheckBox()->Selected(_Selected);
  901. if(pItem->GetCountChild())
  902. SetItemCheckBox(_Selected,pItem);
  903. }
  904. }
  905. return true;
  906. }
  907. else
  908. {
  909. int nIndex = 0;
  910. int nCount = GetCount();
  911. while(nIndex < nCount)
  912. {
  913. CTreeNodeUI* pItem = (CTreeNodeUI*)GetItemAt(nIndex);
  914. pItem->GetCheckBox()->Selected(_Selected);
  915. if(pItem->GetCountChild())
  916. SetItemCheckBox(_Selected,pItem);
  917. nIndex++;
  918. }
  919. return true;
  920. }
  921. return false;
  922. }
  923. //************************************
  924. // 函数名称: SetItemExpand
  925. // 返回类型: void
  926. // 参数信息: bool _Expanded
  927. // 参数信息: CTreeNodeUI * _TreeNode
  928. // 函数说明:
  929. //************************************
  930. void CTreeViewUI::SetItemExpand( bool _Expanded,CTreeNodeUI* _TreeNode /*= NULL*/ )
  931. {
  932. if(_TreeNode)
  933. {
  934. if(_TreeNode->GetCountChild() > 0)
  935. {
  936. int nCount = _TreeNode->GetCountChild();
  937. for(int nIndex = 0;nIndex < nCount;nIndex++)
  938. {
  939. CTreeNodeUI* pItem = _TreeNode->GetChildNode(nIndex);
  940. pItem->SetVisible(_Expanded);
  941. if(pItem->GetCountChild() && !pItem->GetFolderButton()->IsSelected())
  942. SetItemExpand(_Expanded,pItem);
  943. }
  944. }
  945. }
  946. else
  947. {
  948. int nIndex = 0;
  949. int nCount = GetCount();
  950. while(nIndex < nCount)
  951. {
  952. CTreeNodeUI* pItem = (CTreeNodeUI*)GetItemAt(nIndex);
  953. pItem->SetVisible(_Expanded);
  954. if(pItem->GetCountChild() && !pItem->GetFolderButton()->IsSelected())
  955. SetItemExpand(_Expanded,pItem);
  956. nIndex++;
  957. }
  958. }
  959. }
  960. //************************************
  961. // 函数名称: SetVisibleFolderBtn
  962. // 返回类型: void
  963. // 参数信息: bool _IsVisibled
  964. // 函数说明:
  965. //************************************
  966. void CTreeViewUI::SetVisibleFolderBtn( bool _IsVisibled )
  967. {
  968. m_bVisibleFolderBtn = _IsVisibled;
  969. int nCount = this->GetCount();
  970. for(int nIndex = 0;nIndex < nCount;nIndex++)
  971. {
  972. CTreeNodeUI* pItem = static_cast<CTreeNodeUI*>(this->GetItemAt(nIndex));
  973. pItem->GetFolderButton()->SetVisible(m_bVisibleFolderBtn);
  974. }
  975. }
  976. //************************************
  977. // 函数名称: GetVisibleFolderBtn
  978. // 返回类型: bool
  979. // 函数说明:
  980. //************************************
  981. bool CTreeViewUI::GetVisibleFolderBtn()
  982. {
  983. return m_bVisibleFolderBtn;
  984. }
  985. //************************************
  986. // 函数名称: SetVisibleCheckBtn
  987. // 返回类型: void
  988. // 参数信息: bool _IsVisibled
  989. // 函数说明:
  990. //************************************
  991. void CTreeViewUI::SetVisibleCheckBtn( bool _IsVisibled )
  992. {
  993. m_bVisibleCheckBtn = _IsVisibled;
  994. int nCount = this->GetCount();
  995. for(int nIndex = 0;nIndex < nCount;nIndex++)
  996. {
  997. CTreeNodeUI* pItem = static_cast<CTreeNodeUI*>(this->GetItemAt(nIndex));
  998. pItem->GetCheckBox()->SetVisible(m_bVisibleCheckBtn);
  999. }
  1000. }
  1001. //************************************
  1002. // 函数名称: GetVisibleCheckBtn
  1003. // 返回类型: bool
  1004. // 函数说明:
  1005. //************************************
  1006. bool CTreeViewUI::GetVisibleCheckBtn()
  1007. {
  1008. return m_bVisibleCheckBtn;
  1009. }
  1010. //************************************
  1011. // 函数名称: SetItemMinWidth
  1012. // 返回类型: void
  1013. // 参数信息: UINT _ItemMinWidth
  1014. // 函数说明:
  1015. //************************************
  1016. void CTreeViewUI::SetItemMinWidth( UINT _ItemMinWidth )
  1017. {
  1018. m_uItemMinWidth = _ItemMinWidth;
  1019. for(int nIndex = 0;nIndex < GetCount();nIndex++){
  1020. CTreeNodeUI* pTreeNode = static_cast<CTreeNodeUI*>(GetItemAt(nIndex));
  1021. if(pTreeNode)
  1022. pTreeNode->SetMinWidth(GetItemMinWidth());
  1023. }
  1024. Invalidate();
  1025. }
  1026. //************************************
  1027. // 函数名称: GetItemMinWidth
  1028. // 返回类型: UINT
  1029. // 函数说明:
  1030. //************************************
  1031. UINT CTreeViewUI::GetItemMinWidth()
  1032. {
  1033. return m_uItemMinWidth;
  1034. }
  1035. //************************************
  1036. // 函数名称: SetItemTextColor
  1037. // 返回类型: void
  1038. // 参数信息: DWORD _dwItemTextColor
  1039. // 函数说明:
  1040. //************************************
  1041. void CTreeViewUI::SetItemTextColor( DWORD _dwItemTextColor )
  1042. {
  1043. for(int nIndex = 0;nIndex < GetCount();nIndex++){
  1044. CTreeNodeUI* pTreeNode = static_cast<CTreeNodeUI*>(GetItemAt(nIndex));
  1045. if(pTreeNode)
  1046. pTreeNode->SetItemTextColor(_dwItemTextColor);
  1047. }
  1048. }
  1049. //************************************
  1050. // 函数名称: SetItemHotTextColor
  1051. // 返回类型: void
  1052. // 参数信息: DWORD _dwItemHotTextColor
  1053. // 函数说明:
  1054. //************************************
  1055. void CTreeViewUI::SetItemHotTextColor( DWORD _dwItemHotTextColor )
  1056. {
  1057. for(int nIndex = 0;nIndex < GetCount();nIndex++){
  1058. CTreeNodeUI* pTreeNode = static_cast<CTreeNodeUI*>(GetItemAt(nIndex));
  1059. if(pTreeNode)
  1060. pTreeNode->SetItemHotTextColor(_dwItemHotTextColor);
  1061. }
  1062. }
  1063. //************************************
  1064. // 函数名称: SetSelItemTextColor
  1065. // 返回类型: void
  1066. // 参数信息: DWORD _dwSelItemTextColor
  1067. // 函数说明:
  1068. //************************************
  1069. void CTreeViewUI::SetSelItemTextColor( DWORD _dwSelItemTextColor )
  1070. {
  1071. for(int nIndex = 0;nIndex < GetCount();nIndex++){
  1072. CTreeNodeUI* pTreeNode = static_cast<CTreeNodeUI*>(GetItemAt(nIndex));
  1073. if(pTreeNode)
  1074. pTreeNode->SetSelItemTextColor(_dwSelItemTextColor);
  1075. }
  1076. }
  1077. //************************************
  1078. // 函数名称: SetSelItemHotTextColor
  1079. // 返回类型: void
  1080. // 参数信息: DWORD _dwSelHotItemTextColor
  1081. // 函数说明:
  1082. //************************************
  1083. void CTreeViewUI::SetSelItemHotTextColor( DWORD _dwSelHotItemTextColor )
  1084. {
  1085. for(int nIndex = 0;nIndex < GetCount();nIndex++){
  1086. CTreeNodeUI* pTreeNode = static_cast<CTreeNodeUI*>(GetItemAt(nIndex));
  1087. if(pTreeNode)
  1088. pTreeNode->SetSelItemHotTextColor(_dwSelHotItemTextColor);
  1089. }
  1090. }
  1091. DuiLib::CDuiString CTreeViewUI::GetItemText (int iIndex) const
  1092. {
  1093. CTreeNodeUI* pTreeNode = static_cast<CTreeNodeUI*>(GetItemAt (iIndex));
  1094. if (pTreeNode)
  1095. {
  1096. return pTreeNode->GetItemText ();
  1097. }
  1098. return _T ("");
  1099. }
  1100. //************************************
  1101. // 函数名称: SetAttribute
  1102. // 返回类型: void
  1103. // 参数信息: LPCTSTR pstrName
  1104. // 参数信息: LPCTSTR pstrValue
  1105. // 函数说明:
  1106. //************************************
  1107. void CTreeViewUI::SetAttribute( LPCTSTR pstrName, LPCTSTR pstrValue )
  1108. {
  1109. if(_tcscmp(pstrName,_T("visiblefolderbtn")) == 0)
  1110. SetVisibleFolderBtn(_tcscmp(pstrValue,_T("true")) == 0);
  1111. else if(_tcscmp(pstrName,_T("visiblecheckbtn")) == 0)
  1112. SetVisibleCheckBtn(_tcscmp(pstrValue,_T("true")) == 0);
  1113. else if(_tcscmp(pstrName,_T("itemminwidth")) == 0)
  1114. SetItemMinWidth(_ttoi(pstrValue));
  1115. else if(_tcscmp(pstrName, _T("itemtextcolor")) == 0 ){
  1116. if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
  1117. LPTSTR pstr = NULL;
  1118. DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
  1119. SetItemTextColor(clrColor);
  1120. }
  1121. else if(_tcscmp(pstrName, _T("itemhottextcolor")) == 0 ){
  1122. if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
  1123. LPTSTR pstr = NULL;
  1124. DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
  1125. SetItemHotTextColor(clrColor);
  1126. }
  1127. else if(_tcscmp(pstrName, _T("selitemtextcolor")) == 0 ){
  1128. if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
  1129. LPTSTR pstr = NULL;
  1130. DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
  1131. SetSelItemTextColor(clrColor);
  1132. }
  1133. else if(_tcscmp(pstrName, _T("selitemhottextcolor")) == 0 ){
  1134. if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
  1135. LPTSTR pstr = NULL;
  1136. DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
  1137. SetSelItemHotTextColor(clrColor);
  1138. }
  1139. else CListUI::SetAttribute(pstrName,pstrValue);
  1140. }
  1141. }