dbaseview.cpp
上传用户:yklx818
上传日期:2013-04-13
资源大小:459k
文件大小:4k
源码类别:

GIS编程

开发平台:

Visual C++

  1. // dbaseview.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Draw.h"
  5. #include "dbaseview.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CDatabaseView
  13. IMPLEMENT_DYNCREATE(CDatabaseView, CScrollView)
  14. CDatabaseView::CDatabaseView()
  15. {
  16. }
  17. CDatabaseView::~CDatabaseView()
  18. {
  19. }
  20. BEGIN_MESSAGE_MAP(CDatabaseView, CScrollView)
  21. //{{AFX_MSG_MAP(CDatabaseView)
  22. ON_WM_SIZE()
  23. //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CDatabaseView drawing
  27. void CDatabaseView::OnInitialUpdate()
  28. {
  29.     CDrawDoc* pDoc=GetDocument();   //得到指向当前文档对象的指针
  30. m_pSet1=&pDoc->m_data1;         //得到指向记录集合对象的指针
  31. CSize sizeTotal;
  32. // TODO: calculate the total size of this view
  33. Init1();
  34. Init2();
  35. CScrollView::OnInitialUpdate();
  36. //sizeTotal.cx = sizeTotal.cy = 100;
  37. SetScrollSizes(MM_TEXT, sizeTotal,sizePage,sizeLine);
  38. }
  39. void CDatabaseView::OnDraw(CDC* pDC)
  40. {
  41. // CDocument* pDoc = GetDocument();
  42. // TODO: add draw code here
  43. CDrawDoc* pDoc=GetDocument();
  44. // CPen pen(0,1,RGB(255,0,0));
  45. pDC->SetTextColor(RGB(255,0,0));
  46. CString c1;
  47. CString& c2=c1;
  48. pDC->SetMapMode(1);
  49. m_pSet1->MoveFirst();
  50. for(int i=0;i<nRecord;i++)
  51. {
  52. for(int j=0;j<nField;j++)
  53. {
  54. m_pSet1->GetFieldValue(j,c2);
  55. pDC->TextOut(nFieldStart[j],i*nCharHeight,c1);
  56. }
  57. m_pSet1->MoveNext();
  58. }
  59. }
  60. void CDatabaseView::Init1()
  61. {
  62. TEXTMETRIC tm;
  63. CDC* dc=GetDC();
  64. dc->GetTextMetrics(&tm);
  65. ReleaseDC(dc);
  66. nCharHeight=tm.tmHeight+2;
  67. nCharWidth=tm.tmAveCharWidth+2;
  68. if(m_pSet1->IsOpen())
  69. m_pSet1->Close();
  70.     m_pSet1->Open();
  71. nField=m_pSet1->GetODBCFieldCount();
  72. CODBCFieldInfo fieldinfo1;
  73. CODBCFieldInfo& fieldinfo=fieldinfo1;
  74. for(int i=0;i<nField;i++)
  75. {
  76. m_pSet1->GetODBCFieldInfo(i,fieldinfo);
  77. nFieldWide[i]=(short)fieldinfo1.m_nPrecision;
  78. }
  79. nScreenWide=0;
  80. nFieldStart[0]=0;
  81. for(i=0;i<nField;i++)
  82. {
  83. nScreenWide=nScreenWide+nFieldWide[i]*nCharWidth;
  84. nFieldStart[i+1]=nFieldStart[i]+nFieldWide[i]*nCharWidth;
  85. }
  86. sizeTotal.cx=nScreenWide;
  87. sizeLine.cx=nCharWidth*5;
  88. }
  89. void CDatabaseView::Init2()
  90. {
  91. if(m_pSet1->IsOpen())  //如果打开了记录集合对象
  92. m_pSet1->Close();
  93. m_pSet1->Open();
  94. if(m_pSet1->IsBOF())   //如果记录指针指向记录集合范围外,即记录集合不包含记录
  95. nRecord=0;
  96. else
  97. {
  98. m_pSet1->MoveFirst();
  99. nRecord=0;
  100. while(!m_pSet1->IsBOF())  //直到指向最后一条记录范围外
  101. {
  102. m_pSet1->MoveNext();
  103. nRecord++;
  104. }
  105. }
  106. nScreenHeight=nRecord*nCharHeight;
  107. if(nScreenHeight==0)
  108. nScreenHeight=20;
  109. sizeTotal.cy=nScreenHeight;
  110. sizeLine.cy=nCharHeight+2;
  111. // if(nRecord>0)          //添加的与编辑功能有关的代码
  112. // {
  113. // if(nIndex<1||nIndex>nRecord)  //如果记录指针指向记录集合的范围外
  114. // nIndex=1;                 //将记录指针指向第一条记录
  115. // }
  116. // else
  117. // nIndex=-1;
  118. }
  119. /////////////////////////////////////////////////////////////////////////////
  120. // CDatabaseView diagnostics
  121. #ifdef _DEBUG
  122. void CDatabaseView::AssertValid() const
  123. {
  124. CScrollView::AssertValid();
  125. }
  126. void CDatabaseView::Dump(CDumpContext& dc) const
  127. {
  128. CScrollView::Dump(dc);
  129. }
  130. CDrawDoc* CDatabaseView::GetDocument()
  131. {
  132. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc)));
  133. return (CDrawDoc*)m_pDocument;
  134. }
  135. #endif //_DEBUG
  136. /////////////////////////////////////////////////////////////////////////////
  137. // CDatabaseView message handlers
  138. void CDatabaseView::OnSize(UINT nType, int cx, int cy) 
  139. {
  140. CScrollView::OnSize(nType, cx, cy);
  141. // TODO: Add your message handler code here
  142. sizePage.cx=cx;//设置页滚动区域的宽度
  143. sizePage.cy=cy;//高度
  144. SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine);//设置视图滚动范围
  145. }