SaveReadView.cpp
上传用户:wmflame
上传日期:2010-02-25
资源大小:39k
文件大小:6k
源码类别:

文件操作

开发平台:

Visual C++

  1. // SaveReadView.cpp : implementation of the CSaveReadView class
  2. //
  3. #include "stdafx.h"
  4. #include "SaveRead.h"
  5. #include "SaveReadDoc.h"
  6. #include "SaveReadView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CSaveReadView
  14. IMPLEMENT_DYNCREATE(CSaveReadView, CFormView)
  15. BEGIN_MESSAGE_MAP(CSaveReadView, CFormView)
  16. //{{AFX_MSG_MAP(CSaveReadView)
  17. ON_EN_CHANGE(IDC_NAME, OnChangeName)
  18. ON_EN_CHANGE(IDC_SCORE, OnChangeScore)
  19. ON_CBN_SELCHANGE(IDC_SUBJECT, OnSelchangeSubject)
  20. ON_COMMAND(ID_TEXT, OnText)
  21. //}}AFX_MSG_MAP
  22. // Standard printing commands
  23. ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
  24. ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
  25. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
  26. END_MESSAGE_MAP()
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CSaveReadView construction/destruction
  29. CSaveReadView::CSaveReadView()
  30. : CFormView(CSaveReadView::IDD)
  31. {
  32. //{{AFX_DATA_INIT(CSaveReadView)
  33. m_score = 0.0f;
  34. m_name = _T("");
  35. m_total = 0.0f;
  36. //}}AFX_DATA_INIT
  37. // TODO: add construction code here
  38. }
  39. CSaveReadView::~CSaveReadView()
  40. {
  41. }
  42. void CSaveReadView::DoDataExchange(CDataExchange* pDX)
  43. {
  44. CFormView::DoDataExchange(pDX);
  45. //{{AFX_DATA_MAP(CSaveReadView)
  46. DDX_Control(pDX, IDC_SUBJECT, m_subject);
  47. DDX_Text(pDX, IDC_SCORE, m_score);
  48. DDV_MinMaxFloat(pDX, m_score, 0.f, 100.f);
  49. DDX_Text(pDX, IDC_NAME, m_name);
  50. DDX_Text(pDX, IDC_TOTAL, m_total);
  51. DDV_MinMaxFloat(pDX, m_total, 0.f, 900.f);
  52. //}}AFX_DATA_MAP
  53. }
  54. BOOL CSaveReadView::PreCreateWindow(CREATESTRUCT& cs)
  55. {
  56. // TODO: Modify the Window class or styles here by modifying
  57. //  the CREATESTRUCT cs
  58. return CFormView::PreCreateWindow(cs);
  59. }
  60. void CSaveReadView::OnInitialUpdate()
  61. {
  62. CFormView::OnInitialUpdate();
  63. ResizeParentToFit();
  64. //设置控件的字体大小
  65. CFont font1;
  66. font1.CreateFont(30,0,0,0,FW_NORMAL,
  67.             FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
  68. CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_MODERN,
  69. "CourierNew");
  70. GetDlgItem(IDC_STATIC1)->SetFont(&font1);
  71. GetDlgItem(IDC_STATIC2)->SetFont(&font1);
  72. GetDlgItem(IDC_STATIC3)->SetFont(&font1);
  73. GetDlgItem(IDC_STATIC4)->SetFont(&font1);
  74. GetDlgItem(IDC_STATIC5)->SetFont(&font1);
  75. m_subject.SetFont(&font1);
  76. //初始化与控件相对应的成员变量并显示
  77. CSaveReadDoc *pDoc=GetDocument();
  78. m_name=pDoc->name;
  79. m_subject.SetCurSel(pDoc->m_nSubject[0].subject);
  80. m_score=pDoc->m_nSubject[0].score;
  81. m_total=pDoc->total;
  82. UpdateData(FALSE);
  83. }
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CSaveReadView printing
  86. BOOL CSaveReadView::OnPreparePrinting(CPrintInfo* pInfo)
  87. {
  88. // default preparation
  89. return DoPreparePrinting(pInfo);
  90. }
  91. void CSaveReadView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  92. {
  93. // TODO: add extra initialization before printing
  94. }
  95. void CSaveReadView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  96. {
  97. // TODO: add cleanup after printing
  98. }
  99. void CSaveReadView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
  100. {
  101. // TODO: add customized printing code here
  102. }
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CSaveReadView diagnostics
  105. #ifdef _DEBUG
  106. void CSaveReadView::AssertValid() const
  107. {
  108. CFormView::AssertValid();
  109. }
  110. void CSaveReadView::Dump(CDumpContext& dc) const
  111. {
  112. CFormView::Dump(dc);
  113. }
  114. CSaveReadDoc* CSaveReadView::GetDocument() // non-debug version is inline
  115. {
  116. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSaveReadDoc)));
  117. return (CSaveReadDoc*)m_pDocument;
  118. }
  119. #endif //_DEBUG
  120. /////////////////////////////////////////////////////////////////////////////
  121. // CSaveReadView message handlers
  122. void CSaveReadView::OnChangeName() 
  123. {
  124. CSaveReadDoc *pDoc=GetDocument();  //获取文档类指针
  125. UpdateData();                    //获取最新的输入
  126. if(strcmp(pDoc->name,m_name))    //判断姓名是否改变
  127. {
  128. pDoc->name=m_name;   //如果姓名已改变,记录新的姓名
  129.   pDoc->SetModifiedFlag();     //设置文档修改标志
  130. }
  131. }
  132. void CSaveReadView::OnChangeScore() 
  133. {
  134. CSaveReadDoc *pDoc=GetDocument();  //获取文档类指针
  135. UpdateData();                    //获取最新的输入
  136.     int current=m_subject.GetCurSel();  //获取当前选中项的序号
  137.  //判断成绩是否改变
  138. if(pDoc->m_nSubject[current].score!=m_score)
  139. {
  140. //从新计算总成绩
  141. pDoc->total=pDoc->total+m_score-pDoc->m_nSubject[current].score;
  142.     m_total=pDoc->total;
  143. pDoc->m_nSubject[current].score=m_score;//记录新成绩
  144. pDoc->SetModifiedFlag();     //设置文档修改标志
  145.         UpdateData(FALSE);           //重新显示
  146. }
  147. }
  148. void CSaveReadView::OnSelchangeSubject() 
  149. {
  150. CSaveReadDoc *pDoc=GetDocument();  //获取文档类指针
  151. UpdateData();                    //获取最新的输入
  152.     int current=m_subject.GetCurSel();//获取当前选中项的序号
  153. if(pDoc->m_nSubject[current].score!=m_score)
  154. {      //判断是否当前科目已改变如果改变显示相应科目的成绩
  155. m_score=pDoc->m_nSubject[current].score;
  156. UpdateData(FALSE); //重新显示
  157. }
  158. }
  159. void CSaveReadView::OnText() 
  160. {
  161. CString filename;
  162. CString str;
  163. CSaveReadDoc *pDoc=GetDocument();  //获取文档类指针
  164. UpdateData();     //获取最新的输入
  165. if(m_name.IsEmpty())      //输入数据中没有输入姓名,则将文件名设为"无名"
  166. filename="无名.txt";
  167. else                       //将文件名设为输入的姓名并将其扩展名设为txt
  168. filename=m_name+".txt";
  169. CStdioFile file;          //CStdioFile类是CFile类的派生类,它是以流方式操作文本
  170. if(file.Open(filename,CFile::modeCreate|CFile::modeWrite|CFile::typeText)==0)
  171. {
  172. str="创建文件"+filename+"失败";
  173. AfxMessageBox(str);    //创建文件失败报告并返回
  174. return;
  175. }
  176. str.Format("                   %s的成绩表nn",m_name); //写入文件主题
  177. file.WriteString(str);
  178. str.Format("                      总成绩:   %.1f分nn",m_total); //写入总成绩
  179. file.WriteString(str);
  180. str.Format("             科目:      成绩:  单位(分)n");    //写入成绩表头
  181. file.WriteString(str);
  182.     for(int i=0;i<8;i++)
  183. {
  184. CString string;
  185. m_subject.GetLBText(i,string);       //得到科目名称
  186.         str.Format("%18s      %.1fn",string,pDoc->m_nSubject[i].score);
  187. file.WriteString(str);               //写入科目名和相应的成绩
  188. }
  189.      file.SetLength(file.GetPosition());  //设置文件长度
  190.  file.Close();                     //关闭文件
  191.  str="notepad "+filename;
  192.  WinExec(str,SW_SHOW);             //利用记事本打开生成的文本文件
  193. }