CustomTreeCtrl.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // CustomTreeCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "PropGrid.h"
  5. #include "CustomTreeCtrl.h"
  6. #include "TreeItem.h"
  7. #include ".\customtreectrl.h"
  8. // CCustomTreeCtrl
  9. IMPLEMENT_DYNAMIC(CCustomTreeCtrl, CTreeCtrl)
  10. CCustomTreeCtrl::CCustomTreeCtrl()
  11. {
  12. }
  13. CCustomTreeCtrl::~CCustomTreeCtrl()
  14. {
  15. }
  16. BEGIN_MESSAGE_MAP(CCustomTreeCtrl, CTreeCtrl)
  17. ON_WM_GETDLGCODE()
  18. ON_WM_KILLFOCUS()
  19. ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnTvnSelchanged)
  20. ON_WM_KEYDOWN()
  21. END_MESSAGE_MAP()
  22. // CCustomTreeCtrl message handlers
  23. UINT CCustomTreeCtrl::OnGetDlgCode()
  24. {
  25. return DLGC_WANTALLKEYS;
  26. }
  27. void CCustomTreeCtrl::OnKillFocus(CWnd* pNewWnd)
  28. {
  29. CTreeCtrl::OnKillFocus(pNewWnd);
  30. DestroyWindow();
  31. }
  32. void CCustomTreeCtrl::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
  33. {
  34. LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
  35. if (pNMTreeView->action == TVC_BYMOUSE)
  36. Validate();
  37. *pResult = 0;
  38. }
  39. void CCustomTreeCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  40. {
  41. if (nChar == VK_ESCAPE)
  42. {
  43. DestroyWindow();
  44. return;
  45. }
  46. else if (nChar == VK_RETURN || nChar == VK_EXECUTE)
  47. {
  48. Validate();
  49. return;
  50. }
  51. CTreeCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
  52. }
  53. void CCustomTreeCtrl::Validate()
  54. {
  55. if (GetSafeHwnd())
  56. {
  57. HTREEITEM hItem = GetSelectedItem();
  58. if (hItem && !ItemHasChildren(hItem))
  59. {
  60. CString strText = GetItemText(hItem);
  61. m_item->SetValue(LPCTSTR(strText));
  62. DestroyWindow();
  63. }
  64. }
  65. }
  66. void CCustomTreeCtrl::PostNcDestroy()
  67. {
  68. CTreeCtrl::PostNcDestroy();
  69. delete this;
  70. }