PtreeView.cpp
上传用户:tenhai
上传日期:2021-02-19
资源大小:492k
文件大小:3k
源码类别:

组合框控件

开发平台:

Visual C++

  1. // PtreeView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "prop.h"
  5. #include "PtreeView.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. char  *buff, *oldbuff;
  12. extern char *cuttoken(char **lhd);
  13. extern char *uncuttoken(char **lhd, char *token);
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CPtreeView
  16. IMPLEMENT_DYNCREATE(CPtreeView, CTreeView)
  17. CPtreeView::CPtreeView()
  18. {
  19. }
  20. CPtreeView::~CPtreeView()
  21. {
  22. }
  23. BEGIN_MESSAGE_MAP(CPtreeView, CTreeView)
  24. //{{AFX_MSG_MAP(CPtreeView)
  25. // NOTE - the ClassWizard will add and remove mapping macros here.
  26. //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CPtreeView drawing
  30. void CPtreeView::OnDraw(CDC* pDC)
  31. {
  32. CDocument* pDoc = GetDocument();
  33. // TODO: add draw code here
  34. }
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CPtreeView diagnostics
  37. #ifdef _DEBUG
  38. void CPtreeView::AssertValid() const
  39. {
  40. CTreeView::AssertValid();
  41. }
  42. void CPtreeView::Dump(CDumpContext& dc) const
  43. {
  44. CTreeView::Dump(dc);
  45. }
  46. #endif //_DEBUG
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CPtreeView message handlers
  49. void CPtreeView::OnInitialUpdate() 
  50. {
  51. CTreeView::OnInitialUpdate();
  52. // TODO: Add your specialized code here and/or call the base class
  53. pCtrl = &GetTreeCtrl();
  54. ASSERT(pCtrl != NULL);
  55. long        lStyleOld, lStyleMask;
  56. lStyleMask=TVS_HASLINES|TVS_HASBUTTONS;
  57. lStyleOld = GetWindowLong(pCtrl->m_hWnd, GWL_STYLE);
  58. lStyleOld &= ~lStyleMask;
  59. lStyleOld |= lStyleMask;
  60. SetWindowLong(m_hWnd, GWL_STYLE, lStyleOld);
  61. SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);
  62. buff=(char *)malloc(5000);
  63. }
  64. void CPtreeView::countrules(HTREEITEM hLHS)
  65. {
  66. char *token, *head;
  67. HTREEITEM hmyLHS;
  68. head=cuttoken(&buff);
  69. hmyLHS=pCtrl->InsertItem(head, hLHS, TVI_LAST);
  70. token=cuttoken(&buff);
  71. if (strcmp(token, "(")==0){
  72. while (*(token=cuttoken(&buff))!=''){
  73. if (strcmp(token, ")")==0)
  74. return;
  75. else{
  76. uncuttoken(&buff, token);
  77. countrules(hmyLHS);
  78. }
  79. }
  80. }
  81. else 
  82. if (*token!=''){
  83. uncuttoken(&buff, token);
  84. return;
  85. }
  86. }
  87. void CPtreeView::UpdateTree(int id, CString str)
  88. {
  89. char s[10], title[20];
  90. HTREEITEM hLHS;
  91. // Insert a root item using the structure. We must
  92. // initialize a TVINSERTSTRUCT structure and pass its
  93. // address to the call. 
  94. strcpy(title, "SENTENCE-");
  95. TVINSERTSTRUCT tvInsert;
  96. tvInsert.hParent = NULL;
  97. tvInsert.hInsertAfter = NULL;
  98. tvInsert.item.mask = TVIF_TEXT;
  99. tvInsert.item.pszText=strcat(title,  _itoa(id, s, 10));
  100. strcpy(buff, str.GetBuffer(1));
  101. hLHS = pCtrl->InsertItem(&tvInsert);
  102. oldbuff=buff;
  103. countrules(hLHS);
  104. buff=oldbuff;
  105. UpdateWindow();
  106. }