ODBCReportView.cpp
上传用户:benben_wyd
上传日期:2010-02-26
资源大小:1229k
文件大小:6k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // ODBCReportView.cpp : implementation of the CODBCReportView class
  2. //
  3. #include "stdafx.h"
  4. #include "ODBCReport.h"
  5. #include "ODBCReportDoc.h"
  6. #include "ODBCReportView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CODBCReportView
  14. IMPLEMENT_DYNCREATE(CODBCReportView, CScrollView)
  15. BEGIN_MESSAGE_MAP(CODBCReportView, CScrollView)
  16. //{{AFX_MSG_MAP(CODBCReportView)
  17. // NOTE - the ClassWizard will add and remove mapping macros here.
  18. //    DO NOT EDIT what you see in these blocks of generated code!
  19. //}}AFX_MSG_MAP
  20. // Standard printing commands
  21. ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
  22. ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
  23. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CODBCReportView construction/destruction
  27. CODBCReportView::CODBCReportView()
  28. {
  29. }
  30. CODBCReportView::~CODBCReportView()
  31. {
  32. m_pSet->Close(); //Close the recordset
  33. }
  34. BOOL CODBCReportView::PreCreateWindow(CREATESTRUCT& cs)
  35. {
  36. return CScrollView::PreCreateWindow(cs);
  37. }
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CODBCReportView drawing
  40. void CODBCReportView::OnDraw(CDC* pDC)
  41. {
  42. CString line; //This is the print line
  43. TEXTMETRIC metrics; //Font measurements
  44. int y = 0; //Current y position on report
  45. CFont TitleFont; //Font for Title
  46. CFont HeadingFont; //Font for headings
  47. CFont DetailFont; //Font for detail lines
  48. //Tab stops at 1 inch, 2.5 inches, and 6.5 inches
  49. int TabStops[] = {100, 275, 650};
  50. //Set the recordset at the beginning
  51. m_pSet->Requery();
  52. //Bold font for Title
  53. TitleFont.CreateFont(44, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0,
  54. ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
  55. DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, 
  56. "Times New Roman");
  57. //Bold and underlined font for headings
  58. HeadingFont.CreateFont(36, 0, 0, 0, FW_BOLD, FALSE, TRUE, 0,
  59. ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
  60. DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, 
  61. "Times New Roman");
  62. //Normal font for detail
  63. DetailFont.CreateFont(18, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0,
  64. ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
  65. DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, 
  66. "Times New Roman");
  67. //Capture default settings when setting the title font
  68. CFont* OldFont = pDC->SelectObject(&TitleFont);
  69. //Retrieve the heading font measurements
  70. pDC->GetTextMetrics(&metrics);
  71. //Compute the heading line height
  72. int LineHeight = metrics.tmHeight + metrics.tmExternalLeading;
  73. //Set Y to the line height.
  74. y -= LineHeight;
  75. pDC->TextOut(200, 0, "ODBC Student Report");
  76. /*
  77. Y must be set to negative numbers because MM_LOENGLISH was
  78. used in the CODBCReportView::OnInitialUpdate funciton.
  79. */
  80. //Set the Heading font
  81. pDC->SelectObject(&HeadingFont);
  82. //Format the heading
  83. line.Format("%st%st%st%s","Dept","Instructor","Class", "Student");
  84. //Output the heading using tabs
  85. pDC->TabbedTextOut(0, y, line, 3, TabStops, 0);
  86. //Detect empty recordset
  87. if (m_pSet->IsBOF()) {
  88. return;
  89. }
  90. //Compute the detail line height
  91. LineHeight = metrics.tmHeight + metrics.tmExternalLeading;
  92. y -= LineHeight; //Adjust y position
  93. //Set the detail font
  94. pDC->SelectObject(&DetailFont);
  95. //Retrieve detail font measurements
  96. pDC->GetTextMetrics(&metrics);
  97. //Compute the detail line height
  98. LineHeight = metrics.tmHeight + metrics.tmExternalLeading;
  99. //Scroll through the recordset
  100. while (!m_pSet->IsEOF()) {
  101. //Format the detail line
  102. line.Format("%st%st%st%s %s",
  103. m_pSet->m_DepartmentCode,
  104. m_pSet->m_Name,
  105. m_pSet->m_Description,
  106. m_pSet->m_FirstName,
  107. m_pSet->m_LastName);
  108. //Output the detail line using tabs
  109. pDC->TabbedTextOut(0, y, line, 3, TabStops, 0);
  110. //Get the next recordset number
  111. y -= LineHeight; //Adjust y position
  112. m_pSet->MoveNext();
  113. }
  114. //Restore default settings
  115. pDC->SelectObject(OldFont);
  116. }
  117. void CODBCReportView::OnInitialUpdate()
  118. {
  119. CScrollView::OnInitialUpdate();
  120. //Limit size to 8" x 20"
  121. CSize sizeTotal(800, 2000);
  122. //Because of MM_LOENGLISH, Sizes are in .01 of an inch
  123. SetScrollSizes(MM_LOENGLISH, sizeTotal);
  124. //Retrieve the document
  125. CODBCReportDoc* pDoc = GetDocument();
  126. ASSERT_VALID(pDoc); //Make sure it's valid
  127. //Set the window title
  128. pDoc->SetTitle("ODBC Student Report");
  129. //Set the m_pSet pointer to the m_dbSet recordset
  130. m_pSet = &pDoc->m_dbSet;
  131. //Open the recordset
  132. m_pSet->Open();
  133. }
  134. /////////////////////////////////////////////////////////////////////////////
  135. // CODBCReportView printing
  136. BOOL CODBCReportView::OnPreparePrinting(CPrintInfo* pInfo)
  137. {
  138. // default preparation
  139. return DoPreparePrinting(pInfo);
  140. }
  141. void CODBCReportView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  142. {
  143. }
  144. void CODBCReportView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  145. {
  146. }
  147. /////////////////////////////////////////////////////////////////////////////
  148. // CODBCReportView diagnostics
  149. #ifdef _DEBUG
  150. void CODBCReportView::AssertValid() const
  151. {
  152. CScrollView::AssertValid();
  153. }
  154. void CODBCReportView::Dump(CDumpContext& dc) const
  155. {
  156. CScrollView::Dump(dc);
  157. }
  158. CODBCReportDoc* CODBCReportView::GetDocument() // non-debug version is inline
  159. {
  160. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CODBCReportDoc)));
  161. return (CODBCReportDoc*)m_pDocument;
  162. }
  163. #endif //_DEBUG
  164. /////////////////////////////////////////////////////////////////////////////
  165. // CODBCReportView message handlers