snmp_cwdmView.cpp
上传用户:shgx688
上传日期:2009-12-27
资源大小:855k
文件大小:10k
源码类别:

SNMP编程

开发平台:

MultiPlatform

  1. // snmp_cwdmView.cpp : implementation of the CSnmp_cwdmView class
  2. //
  3. #include "stdafx.h"
  4. #include "OAM.h"
  5. #include "OAMDoc.h"
  6. #include "snmp_cwdmView.h"
  7. #include "NewItemDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CSnmp_cwdmView
  15. IMPLEMENT_DYNCREATE(CSnmp_cwdmView, CTreeView)
  16. BEGIN_MESSAGE_MAP(CSnmp_cwdmView, CTreeView)
  17. //{{AFX_MSG_MAP(CSnmp_cwdmView)
  18. ON_COMMAND(IDD_NEWITEM1, OnNewitem)
  19. ON_WM_SIZE()
  20. ON_COMMAND(IDD_DELETE, OnDelete)
  21. ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
  22. ON_WM_RBUTTONDOWN()
  23. ON_WM_LBUTTONDOWN()
  24. //}}AFX_MSG_MAP
  25. // Standard printing commands
  26. ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
  27. ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
  28. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
  29. END_MESSAGE_MAP()
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CSnmp_cwdmView construction/destruction
  32. CSnmp_cwdmView::CSnmp_cwdmView()
  33. {
  34. // TODO: add construction code here
  35. // this->SetWindowPos(NULL,0,24,200,4000,SWP_NOZORDER);
  36. }
  37. CSnmp_cwdmView::~CSnmp_cwdmView()
  38. {
  39. }
  40. BOOL CSnmp_cwdmView::PreCreateWindow(CREATESTRUCT& cs)
  41. {
  42. // TODO: Modify the Window class or styles here by modifying
  43. //  the CREATESTRUCT cs
  44. if (!CTreeView::PreCreateWindow(cs))
  45. return FALSE;
  46. //SAMPLE: want buttons and lines everywhere!
  47. // cs.style |= TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT;
  48. cs.style |= TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SINGLEEXPAND ;
  49. return TRUE;
  50. // return CTreeView::PreCreateWindow(cs);
  51. }
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CSnmp_cwdmView drawing
  54. void CSnmp_cwdmView::OnDraw(CDC* pDC)
  55. {
  56. COAMDoc* pDoc = GetDocument();
  57. //this->SetWindowPos(NULL,0,24,2000,4000,SWP_NOZORDER);
  58. ASSERT_VALID(pDoc);
  59. // TODO: add draw code for native data here
  60. }
  61. void CSnmp_cwdmView::OnInitialUpdate()
  62. {
  63. CTreeView::OnInitialUpdate();
  64. // this->SetWindowPos(NULL,0,24,200,4000,SWP_NOZORDER);
  65. CTreeCtrl& theTree = GetTreeCtrl();
  66. CGlobalVariable::m_pStationTreeView = this;
  67. char lpszPathName[150] = "mymib";
  68.     CGlobalVariable::m_pMainDoc->OnOpenDocument(lpszPathName);
  69.  // CGlobalVariable::m_pMainDoc->LoadMe();
  70. }
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CSnmp_cwdmView printing
  73. BOOL CSnmp_cwdmView::OnPreparePrinting(CPrintInfo* pInfo)
  74. {
  75. // default preparation
  76. return DoPreparePrinting(pInfo);
  77. }
  78. void CSnmp_cwdmView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  79. {
  80. // TODO: add extra initialization before printing
  81. }
  82. void CSnmp_cwdmView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  83. {
  84. // TODO: add cleanup after printing
  85. }
  86. void CSnmp_cwdmView::RecursiveWriteItems(CArchive& ar, CTreeCtrl& refCtrl, HTREEITEM hItem)
  87. {
  88. //SAMPLE: loop through each item at the level of hItem (eg,
  89. // hItem and all of its siblings)
  90. do
  91. {
  92. CString str = refCtrl.GetItemText(hItem);
  93. DWORD data= refCtrl.GetItemData(hItem);
  94. ar << (BYTE) recordRegular;
  95. ar << str;
  96. ar << (BYTE) recordData;
  97. ar << data;
  98. //SAMPLE: if a given item has children, mark a push in the indentation
  99. // level and recurse to get all those children
  100. if (refCtrl.ItemHasChildren(hItem))
  101. {
  102. ar << (BYTE) recordPush;
  103. RecursiveWriteItems(ar, refCtrl, refCtrl.GetChildItem(hItem));
  104. }
  105. }
  106. while ((hItem = refCtrl.GetNextSiblingItem(hItem)) != NULL);
  107. //SAMPLE: done working at this level--mark a pop and return
  108. // either to our caller or the next less nested level.
  109. ar << (BYTE) recordPop;
  110. }
  111. void CSnmp_cwdmView::WriteTreeViewContent(CArchive& ar, CTreeCtrl& refCtrl)
  112. {
  113. UINT nCount = refCtrl.GetCount();
  114. ar << nCount;
  115. // short circuit the zero-element case
  116. if (nCount == 0)
  117. return;
  118. //SAMPLE: there's real work to do! Start recursing at the root item
  119. HTREEITEM hItem = refCtrl.GetRootItem();
  120. RecursiveWriteItems(ar, refCtrl, hItem);
  121. }
  122. void CSnmp_cwdmView::ReadTreeViewContent(CArchive& ar, CTreeCtrl& refCtrl)
  123. {
  124. //SAMPLE: start out by deleting all the content from the control
  125. refCtrl.DeleteAllItems();
  126.    // GetTreeCtrl().DeleteAllItems();
  127. //SAMPLE: figure out if the control was empty when it was stored
  128. UINT nCount;
  129. ar >> nCount;
  130. //SAMPLE: if so, just short circuit the zero-element case
  131. if (nCount == 0)
  132. return;
  133. //SAMPLE: otherwise, start sucking data in!
  134. m_nIndex = 0;
  135. m_hItems[m_nIndex] = TVI_ROOT;
  136. HTREEITEM hAfter = TVI_FIRST;
  137.     
  138. //SAMPLE: while we're above the root, keep reading
  139. while (m_nIndex >= 0)
  140. {
  141. //SAMPLE: get a record type
  142. BYTE byteType;
  143. ar >> byteType;
  144. static CString str;
  145. switch (byteType)
  146. {
  147. //SAMPLE: for a regular record, we'll just insert it into
  148. // the control. Note how we'll insert after the most recently
  149. // added item, and we'll insert as a child of the item on
  150. // our hItems stack.
  151. case recordRegular:
  152. {
  153.     
  154. ar >> str;break;
  155. }
  156. case recordData:
  157. {
  158. LPARAM data;
  159.         ar >> data;
  160.          //hAfter = refCtrl.InsertItem(str,m_hItems[m_nIndex], hAfter);
  161. hAfter = GetTreeCtrl().InsertItem(str,m_hItems[m_nIndex], hAfter);
  162.  //refCtrl.SetItemData(hAfter,data);
  163.      GetTreeCtrl().SetItemData(hAfter,data);
  164.  break;}
  165. //SAMPLE: if we're going one deeper, we'll need to bump the stack
  166. // and reset the insertion flag.  Note that this sample can only
  167. // handle 99 levels of items in the control. You might want to fix
  168. // this code to use a dynamic array (eg, a CArray). Whatever you do,
  169. // the error recovery here needs to be a bit better!
  170. case recordPush:
  171. //ASSERT(m_nIndex < 99);
  172. m_hItems[++m_nIndex] = hAfter;
  173. hAfter = TVI_FIRST;
  174. break;
  175. //SAMPLE: if we're going one less deep, we'll pop the stack
  176. case recordPop:
  177. m_nIndex--;
  178. break;
  179. default:
  180. {
  181. // ASSERT(FALSE);
  182. //TODO: pick a better exception type
  183. AfxThrowMemoryException();
  184. }
  185. }
  186. }
  187. refCtrl.Expand((refCtrl.GetRootItem()),TVE_EXPAND);
  188. }
  189. void CSnmp_cwdmView::Serialize(CArchive& ar) 
  190. {
  191. //SAMPLE: when we're serialized, we'll turn around and call our Write/Read
  192. // helper functions. Just neater code, that's all.
  193. if (ar.IsStoring())
  194. {
  195. WriteTreeViewContent(ar, GetTreeCtrl());
  196. }
  197. else
  198. {
  199. ReadTreeViewContent(ar, GetTreeCtrl());
  200. }
  201. }
  202. /////////////////////////////////////////////////////////////////////////////
  203. // CSnmp_cwdmView diagnostics
  204. #ifdef _DEBUG
  205. void CSnmp_cwdmView::AssertValid() const
  206. {
  207. CTreeView::AssertValid();
  208. }
  209. void CSnmp_cwdmView::Dump(CDumpContext& dc) const
  210. {
  211. CTreeView::Dump(dc);
  212. }
  213. COAMDoc* CSnmp_cwdmView::GetDocument() // non-debug version is inline
  214. {
  215. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COAMDoc)));
  216. return (COAMDoc*)m_pDocument;
  217. }
  218. #endif //_DEBUG
  219. /////////////////////////////////////////////////////////////////////////////
  220. // CSnmp_cwdmView message handlers
  221. void CSnmp_cwdmView::OnNewitem() 
  222. {
  223. CNewItemDlg dlg;
  224. CTreeCtrl& theCtrl = GetTreeCtrl();
  225. dlg.m_pTreeCtrl = &theCtrl;
  226. if (dlg.DoModal() == IDOK)
  227. {
  228. //SAMPLE: the dialog has modified our content directly,
  229. // but it's up to us to set the dirty flag
  230. GetDocument()->SetModifiedFlag();
  231. }
  232. }
  233. void CSnmp_cwdmView::OnDelete() 
  234. {
  235.  HTREEITEM htItem = GetTreeCtrl().GetSelectedItem();
  236.         if ((htItem != NULL) )
  237. {
  238.             GetTreeCtrl().DeleteItem(htItem);
  239. GetDocument()->SetModifiedFlag();
  240. }
  241. }
  242. void CSnmp_cwdmView::OnSize(UINT nType, int cx, int cy) 
  243. {
  244. CTreeView::OnSize(nType, cx, cy);
  245. // TODO: Add your message handler code here
  246. }
  247. void CSnmp_cwdmView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
  248. {
  249. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  250. HTREEITEM hti = GetTreeCtrl().GetSelectedItem();
  251. if (hti)
  252. {
  253. CString str;// = GetTreeCtrl().GetItemText(hti);
  254. CString str_oid;
  255. GetFullPath(hti,str,str_oid);
  256. if(CGlobalVariable::m_pAddressCombo)
  257. {
  258. CGlobalVariable::m_pAddressCombo->AddNewAdress(str_oid);
  259. // CMainFrame::m_oid=str_oid;
  260. }
  261. long nData;
  262. //GetTreeCtrl().GetItemImage (hti, nImage, nImage);
  263. nData = GetTreeCtrl().GetItemData(hti);
  264.             GetTreeCtrl().Select(hti, TVGN_DROPHILITE);
  265. }
  266. *pResult = 0;
  267. }
  268. BOOL CSnmp_cwdmView::GetFullPath(HTREEITEM hItem,CString &str,CString& str_oid)
  269. {
  270. char temp[4];
  271. CString str_oid1;
  272. while(hItem)
  273. {
  274. if(str != _T(""))
  275. {
  276. char temp1[4];
  277. str = GetTreeCtrl().GetItemText(hItem) + _T(".") + str;
  278. _itoa(GetTreeCtrl().GetItemData(hItem),temp1,10);
  279.     str_oid1=(temp1);
  280. str_oid=str_oid1+_T(".") +str_oid;
  281. }
  282. else
  283. {
  284.    str = GetTreeCtrl().GetItemText(hItem);
  285.    _itoa(GetTreeCtrl().GetItemData(hItem),temp,10);
  286.    str_oid=temp;
  287. }
  288. hItem = GetTreeCtrl().GetParentItem(hItem);
  289. }
  290. return TRUE;
  291. }
  292. void CSnmp_cwdmView::OnRButtonDown(UINT nFlags, CPoint point) 
  293. {
  294. UINT uFlags;
  295.         HTREEITEM htItem = GetTreeCtrl().HitTest(point, &uFlags);
  296.         if ((htItem != NULL) && (uFlags & TVHT_ONITEM))
  297. {
  298.             GetTreeCtrl().Select(htItem, TVGN_DROPHILITE);
  299. /* if (point.x == -1 && point.y == -1)
  300. {
  301. //keystroke invocation
  302. CRect rect;
  303. GetClientRect(&rect);
  304. ClientToScreen(&rect);
  305. point = rect.TopLeft();
  306. point.Offset(5,5);
  307. }
  308. CMenu menu;
  309. VERIFY(menu.LoadMenu(IDR_TREE));
  310.    
  311.      CMenu* pPopup = menu.GetSubMenu(0);
  312.       //ASSERT(pPopup != NULL);
  313.         CWnd* pWndPopupOwner = this;
  314.         while (pWndPopupOwner->GetStyle() & WS_CHILD)
  315.                 pWndPopupOwner = pWndPopupOwner->GetParent();
  316.         pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
  317.                 pWndPopupOwner);
  318. }*/
  319. }
  320. }
  321. void CSnmp_cwdmView::OnLButtonDown(UINT nFlags, CPoint point) 
  322. {
  323. // TODO: Add your message handler code here and/or call default
  324. CTreeView::OnLButtonDown(nFlags, point);
  325. }