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

书籍源码

开发平台:

Visual C++

  1. // DAODeptInstView.cpp : implementation of the CDAODeptInstView class
  2. //
  3. #include "stdafx.h"
  4. #include "DAODeptInst.h"
  5. #include "DAODeptInstSet.h"
  6. #include "DAODeptInstDoc.h"
  7. #include "DAODeptInstView.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CDAODeptInstView
  15. IMPLEMENT_DYNCREATE(CDAODeptInstView, CDaoRecordView)
  16. BEGIN_MESSAGE_MAP(CDAODeptInstView, CDaoRecordView)
  17. //{{AFX_MSG_MAP(CDAODeptInstView)
  18. // NOTE - the ClassWizard will add and remove mapping macros here.
  19. //    DO NOT EDIT what you see in these blocks of generated code!
  20. //}}AFX_MSG_MAP
  21. // Standard printing commands
  22. ON_COMMAND(ID_FILE_PRINT, CDaoRecordView::OnFilePrint)
  23. ON_COMMAND(ID_FILE_PRINT_DIRECT, CDaoRecordView::OnFilePrint)
  24. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CDaoRecordView::OnFilePrintPreview)
  25. END_MESSAGE_MAP()
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CDAODeptInstView construction/destruction
  28. CDAODeptInstView::CDAODeptInstView()
  29. : CDaoRecordView(CDAODeptInstView::IDD)
  30. {
  31. //{{AFX_DATA_INIT(CDAODeptInstView)
  32. m_pSet = NULL;
  33. //}}AFX_DATA_INIT
  34. // TODO: add construction code here
  35. }
  36. CDAODeptInstView::~CDAODeptInstView()
  37. {
  38. }
  39. void CDAODeptInstView::DoDataExchange(CDataExchange* pDX)
  40. {
  41. CDaoRecordView::DoDataExchange(pDX);
  42. //{{AFX_DATA_MAP(CDAODeptInstView)
  43. DDX_FieldText(pDX, IDC_DEPARTMENTCODE, m_pSet->m_DepartmentCode, m_pSet);
  44. DDV_MaxChars(pDX, m_pSet->m_DepartmentCode, 4);
  45. DDX_FieldText(pDX, IDC_DEPARTMENTNAME, m_pSet->m_DepartmentName, m_pSet);
  46. DDV_MaxChars(pDX, m_pSet->m_DepartmentName, 50);
  47. DDX_FieldText(pDX, IDC_EMAIL, m_pSet->m_EMAIL, m_pSet);
  48. DDV_MaxChars(pDX, m_pSet->m_EMAIL, 50);
  49. DDX_FieldText(pDX, IDC_INSTRUCTORNAME, m_pSet->m_Name, m_pSet);
  50. DDV_MaxChars(pDX, m_pSet->m_Name, 50);
  51. DDX_FieldText(pDX, IDC_NOTES, m_pSet->m_Notes, m_pSet);
  52. //}}AFX_DATA_MAP
  53. }
  54. BOOL CDAODeptInstView::PreCreateWindow(CREATESTRUCT& cs)
  55. {
  56. // TODO: Modify the Window class or styles here by modifying
  57. //  the CREATESTRUCT cs
  58. return CDaoRecordView::PreCreateWindow(cs);
  59. }
  60. void CDAODeptInstView::OnInitialUpdate()
  61. {
  62. m_pSet = &GetDocument()->m_dAODeptInstSet;
  63. CDaoRecordView::OnInitialUpdate();
  64. GetParentFrame()->RecalcLayout();
  65. ResizeParentToFit();
  66. //Limit size to 8" x 20"
  67. CSize sizeTotal(800, 2000);
  68. //Because of MM_LOENGLISH, Sizes are in .01 of an inch
  69. SetScrollSizes(MM_LOENGLISH, sizeTotal);
  70. }
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CDAODeptInstView printing
  73. BOOL CDAODeptInstView::OnPreparePrinting(CPrintInfo* pInfo)
  74. {
  75. // default preparation
  76. return DoPreparePrinting(pInfo);
  77. }
  78. void CDAODeptInstView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  79. {
  80. // TODO: add extra initialization before printing
  81. }
  82. void CDAODeptInstView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  83. {
  84. // TODO: add cleanup after printing
  85. }
  86. /////////////////////////////////////////////////////////////////////////////
  87. // CDAODeptInstView diagnostics
  88. #ifdef _DEBUG
  89. void CDAODeptInstView::AssertValid() const
  90. {
  91. CDaoRecordView::AssertValid();
  92. }
  93. void CDAODeptInstView::Dump(CDumpContext& dc) const
  94. {
  95. CDaoRecordView::Dump(dc);
  96. }
  97. CDAODeptInstDoc* CDAODeptInstView::GetDocument() // non-debug version is inline
  98. {
  99. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDAODeptInstDoc)));
  100. return (CDAODeptInstDoc*)m_pDocument;
  101. }
  102. #endif //_DEBUG
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CDAODeptInstView database support
  105. CDaoRecordset* CDAODeptInstView::OnGetRecordset()
  106. {
  107. return m_pSet;
  108. }
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CDAODeptInstView message handlers
  111. void CDAODeptInstView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
  112. {
  113.     CString line;    //This is the print line
  114.     TEXTMETRIC metrics;    //Font measurements
  115.     int y = 0;        //Current y position on report
  116.     CFont TitleFont;    //Font for Title
  117.     CFont HeadingFont;    //Font for headings
  118.     CFont DetailFont;    //Font for detail lines
  119.     CFont FooterFont;    //Font for footer
  120.     //Tab stops at 1 inch, 2.5 inches, and 6 inches
  121.     int TabStops[] = {250, 600};
  122.     //Tab stops at 3.5 inches and 6.5 inches
  123.     int FooterTabStops[] = {350, 650};
  124. //Limit size to 8" x 20"
  125. CSize sizeTotal(800, 2000);
  126. //Because of MM_LOENGLISH, Sizes are in .01 of an inch
  127. SetScrollSizes(MM_LOENGLISH, sizeTotal);
  128.     if (!pInfo || pInfo->m_nCurPage == 1) {
  129.         //Set the recordset at the beginning
  130.         m_pSet->Requery();
  131.         //Detect empty recordset
  132.         if (m_pSet->IsBOF()) {
  133.             return;
  134.         }
  135.     }
  136.     //Bold font for Title
  137.     TitleFont.CreateFont(44, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0,
  138.         ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
  139.         DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, 
  140.         "Times New Roman");
  141.     //Bold and underlined font for headings
  142.     HeadingFont.CreateFont(36, 0, 0, 0, FW_BOLD, FALSE, TRUE, 0,
  143.         ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
  144.         DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, 
  145.         "Times New Roman");
  146.     //Normal font for detail
  147.     DetailFont.CreateFont(18, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0,
  148.         ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
  149.         DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, 
  150.         "Times New Roman");
  151.     //Small font for footer
  152.     FooterFont.CreateFont(12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0,
  153.         ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
  154.         DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, 
  155.         "Times New Roman");
  156.     //Capture default settings when setting the title font
  157.     CFont* OldFont = (CFont*) pDC->SelectObject(&TitleFont);
  158.     //Retrieve the heading font measurements
  159.     pDC->GetTextMetrics(&metrics);
  160.     //Compute the heading line height
  161.     int LineHeight = metrics.tmHeight + metrics.tmExternalLeading;
  162.     //Set Y to the line height.
  163.     y -= LineHeight;    
  164.     pDC->TextOut(200, 0, "DAO Student Report");
  165. /*
  166.  Y must be set to negative numbers because MM_LOENGLISH was used
  167. */
  168.     //Set the Heading font
  169.     pDC->SelectObject(&HeadingFont);
  170.     //Format the heading
  171.     line.Format("%s t%s t%s ","Dept Code", "Department", "Instructor");
  172.     //Output the heading at (0, y) using 3 tabs
  173.     pDC->TabbedTextOut(0, y, line, 2, TabStops, 0);
  174.     //Compute the detail line height
  175.     LineHeight = metrics.tmHeight + metrics.tmExternalLeading;
  176.     y -= LineHeight;    //Adjust y position
  177.     //Set the detail font
  178.     pDC->SelectObject(&DetailFont);
  179.     //Retrieve detail font measurements
  180.     pDC->GetTextMetrics(&metrics);
  181.     //Compute the detail line height
  182.     LineHeight = metrics.tmHeight + metrics.tmExternalLeading;
  183.     //Scroll through the recordset
  184.     while (!m_pSet->IsEOF()) {
  185.         if (pInfo && abs(y) > 1000) {
  186.             pInfo->SetMaxPage(pInfo->m_nCurPage + 1);
  187.             break;
  188.         }
  189.         //Format the detail line
  190.         line.Format("%s t%s t%s",
  191.             m_pSet->m_DepartmentCode,
  192.             m_pSet->m_DepartmentName,
  193.             m_pSet->m_Name);
  194.         //Output the print line at (0, y) using 3 tabs
  195.         pDC->TabbedTextOut(0, y, line, 2, TabStops, 0);
  196.         //Get the next recordset number
  197.         y -= LineHeight;    //Adjust y position
  198.         m_pSet->MoveNext();
  199.     }
  200.     if (pInfo) {
  201.         //Set the footer font
  202.         pDC->SelectObject(&FooterFont);
  203.         //Format the footer
  204.         line.Format(
  205.             "DAO Report tPage %d tVisual C++ DB Guide",
  206.             pInfo->m_nCurPage);
  207.         //Output the footer at the bottom using tabs
  208.         pDC->TabbedTextOut(0, -1025, line, 2, FooterTabStops, 0);
  209.     }
  210.     //Restore default settings
  211.     pDC->SelectObject(OldFont);
  212. }