myview.cpp
上传用户:xakehao
上传日期:2013-08-28
资源大小:100k
文件大小:2k
源码类别:

CA认证

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "mycap.h"
  3. #include "MycapDoc.h"
  4. #include "myview.h"
  5. #include "mycapview.h"
  6. #include <vector>
  7. #include <pcap.h>
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. extern int m_flag;
  14. using namespace std;
  15. typedef vector<const u_char *> v;
  16. extern v myvector;
  17. using namespace std;
  18. typedef vector<u_short> u;
  19. extern u mycount;
  20. IMPLEMENT_DYNCREATE(myview, CScrollView)
  21. myview::myview()
  22. {
  23. }
  24. myview::~myview()
  25. {
  26. }
  27. BEGIN_MESSAGE_MAP(myview, CScrollView)
  28. END_MESSAGE_MAP()
  29. void myview::OnInitialUpdate()
  30. {
  31. CScrollView::OnInitialUpdate();
  32. CSize sizeTotal;
  33. sizeTotal.cx = 700;
  34. sizeTotal.cy = 700;//指定刷新的范围
  35. SetScrollSizes(MM_TEXT, sizeTotal);
  36. }
  37. void myview::OnDraw(CDC* pDC)
  38. {
  39. CMyCapDoc* pDoc = GetDocument();
  40. TEXTMETRIC font;
  41. pDC->GetTextMetrics(&font);
  42. LONG height= font.tmHeight;
  43. LONG width = font.tmMaxCharWidth;//获得字符的平均高度和长度
  44. int mycon;
  45. CString str = _T("");
  46. CString total = _T("");
  47. mycon = pDoc->GetCount();
  48. if(mycon != -1)
  49. {//如果标准位不等于-1,表明选中了CListView窗口中的某一项
  50. BYTE *bufer = new BYTE[mycount[mycon]];
  51. //在栈上分配一个mycount[mycon]大小BYTE类型的缓冲区
  52. memcpy(bufer, myvector[mycon], mycount[mycon]);
  53. for(int i=0; i<mycount[mycon]; i++)
  54. {
  55. BYTE bt = *(u_char *)(bufer + i);
  56. str.Format("%02X ", bt);
  57. total += str;//将BYTE类型的数据放到一个字符串中
  58. }
  59. int count = 0;
  60. int length = total.GetLength();
  61. if(length < 51)
  62. {
  63. pDC->TextOut(0, 0, total);
  64. }
  65. else
  66. {
  67. int left = length % 51;//指定每一行只打印50个字符
  68. if(left == 0)
  69. {
  70. count = length / 51;
  71. }
  72. if(left != 0)
  73. {
  74. count = (length - left) / 51 + 1;
  75. }
  76. }
  77. CString *aa = new CString[count];
  78. int t = 0;
  79. int h = 0;
  80. CString mystr = "";
  81. while(t < total.GetLength())
  82. {
  83. mystr += total[t];
  84. aa[h] = mystr;
  85. if(t % 51 == 50)
  86. {
  87. h++;
  88. mystr = "";
  89. }
  90. t++;
  91. }
  92. int n = 0;
  93. pDC->TextOut(0, 0, "包的数据");
  94. while(n < count)
  95. {
  96. pDC->TextOut(0, (n + 1) * height, aa[n]);
  97. n++;
  98. }
  99. delete []aa;
  100. delete bufer;
  101. }
  102. }
  103. #ifdef _DEBUG
  104. void myview::AssertValid() const
  105. {
  106. CScrollView::AssertValid();
  107. }
  108. void myview::Dump(CDumpContext& dc) const
  109. {
  110. CScrollView::Dump(dc);
  111. }
  112. #endif //_DEBUG
  113. CMyCapDoc* myview::GetDocument() 
  114. {
  115. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyCapDoc)));
  116. return (CMyCapDoc*)m_pDocument;
  117. }