GroupTree.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. // GroupTree.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "cp_main.h"
  5. #include "GroupTree.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CGroupTree
  13. CGroupTree::CGroupTree()
  14. {
  15. m_bHide = true;
  16. m_lSelectedFolderID = -1;
  17. m_bSendAllready = false;
  18. }
  19. CGroupTree::~CGroupTree()
  20. {
  21. }
  22. BEGIN_MESSAGE_MAP(CGroupTree, CTreeCtrl)
  23. //{{AFX_MSG_MAP(CGroupTree)
  24. ON_WM_CREATE()
  25. ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
  26. ON_WM_KILLFOCUS()
  27. ON_WM_ACTIVATE()
  28. ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
  29. ON_NOTIFY_REFLECT(TVN_KEYDOWN, OnKeydown)
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CGroupTree message handlers
  34. BOOL CGroupTree::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
  35. {
  36. // TODO: Add your specialized code here and/or call the base class
  37. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  38. }
  39. int CGroupTree::OnCreate(LPCREATESTRUCT lpCreateStruct)
  40. {
  41. if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
  42. return -1;
  43. CImageList iml;
  44. iml.Create(18, 16, ILC_COLOR8, 0, 1);
  45. m_bmClosedFolder.LoadBitmap(IDB_CLOSED_FOLDER);
  46. iml.Add(&m_bmClosedFolder, RGB(255, 0, 0));
  47. m_bmOpenFolder.LoadBitmap(IDB_OPEN_FOLDER);
  48. iml.Add(&m_bmOpenFolder, RGB(255, 0, 0));
  49. SetImageList(&iml, TVSIL_NORMAL);
  50. iml.Detach();
  51. return 0;
  52. }
  53. void CGroupTree::FillTree()
  54. {
  55. DeleteAllItems();
  56. m_bSendAllready = false;
  57. HTREEITEM hItem = InsertItem("Root", TVI_ROOT);
  58. SetItemData(hItem, 0);
  59. SetItemState(hItem, TVIS_EXPANDED, TVIS_EXPANDED);
  60. FillTree(0, hItem);
  61. }
  62. void CGroupTree::FillTree(long lParentID, HTREEITEM hParent)
  63. {
  64. try
  65. {
  66. CMainTable recset;
  67. recset.m_strFilter.Format("bIsGroup = TRUE AND lParentID = %d", lParentID);
  68. recset.Open();
  69. if(recset.IsEOF() == FALSE)
  70. {
  71. HTREEITEM hItem;
  72. while(!recset.IsEOF())
  73. {
  74. if(recset.m_lID == m_lSelectedFolderID)
  75. {
  76. hItem = InsertItem(recset.m_strText, 1, 1, hParent);
  77. SelectItem(hItem);
  78. }
  79. else
  80. {
  81. hItem = InsertItem(recset.m_strText, 0, 0, hParent);
  82. }
  83. SetItemData(hItem, recset.m_lID);
  84. FillTree(recset.m_lID, hItem);
  85. recset.MoveNext();
  86. }
  87. }
  88. }
  89. catch(CDaoException* e)
  90. {
  91. ASSERT(FALSE);
  92. e->Delete();
  93. return;
  94. }
  95. }
  96. void CGroupTree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
  97. {
  98. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  99. // TODO: Add your control notification handler code here
  100. // if(m_bHide == true)
  101. // {
  102. // ::SendMessage(m_NotificationWnd, NM_GROUP_TREE_MESSAGE, GetItemData(pNMTreeView->itemNew.hItem), 0);
  103. // }
  104. *pResult = 0;
  105. }
  106. void CGroupTree::OnKillFocus(CWnd* pNewWnd)
  107. {
  108. TRACE("TREE Kill Focus\n");
  109. CTreeCtrl::OnKillFocus(pNewWnd);
  110. }
  111. void CGroupTree::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
  112. {
  113. CTreeCtrl::OnActivate(nState, pWndOther, bMinimized);
  114. if(m_bHide)
  115. {
  116. if (nState == WA_INACTIVE)
  117. {
  118. TRACE("TREE Inactivate\n");
  119. SendToParent(-1);
  120. }
  121. }
  122. }
  123. void CGroupTree::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
  124. {
  125. TRACE("Dbl Click\n");
  126. HTREEITEM hItem = GetNextItem(TVI_ROOT, TVGN_CARET);
  127. SendToParent(GetItemData(hItem));
  128. //SendToParent(-1);
  129. *pResult = 1;
  130. }
  131. void CGroupTree::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult)
  132. {
  133. TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
  134. switch(pTVKeyDown->wVKey)
  135. {
  136. case VK_RETURN:
  137. {
  138. TRACE("Return\n");
  139. HTREEITEM hItem = GetNextItem(TVI_ROOT, TVGN_CARET);
  140. SendToParent(GetItemData(hItem));
  141. break;
  142. }
  143. case VK_ESCAPE:
  144. {
  145. TRACE("Escape\n");
  146. SendToParent(-1);
  147. break;
  148. }
  149. }
  150. *pResult = 1;
  151. }
  152. void CGroupTree::SendToParent(long lID)
  153. {
  154. if(m_bSendAllready == false)
  155. {
  156. m_bSendAllready = true;
  157. ::PostMessage(m_NotificationWnd, NM_GROUP_TREE_MESSAGE, lID, 0);
  158. }
  159. }