ex101View.cpp
上传用户:qdhmjx
上传日期:2022-07-11
资源大小:2226k
文件大小:7k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // ex101View.cpp : implementation of the CEx101View class
  2. //
  3. #include "stdafx.h"
  4. #include "ex101.h"
  5. #include "ex101Doc.h"
  6. #include "ex101View.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CEx101View
  14. IMPLEMENT_DYNCREATE(CEx101View, CFormView)
  15. BEGIN_MESSAGE_MAP(CEx101View, CFormView)
  16. //{{AFX_MSG_MAP(CEx101View)
  17. ON_EN_CHANGE(IDC_MON_MEM, OnChangeMonMem)
  18. ON_EN_CHANGE(IDC_MON_PRO, OnChangeMonPro)
  19. ON_EN_CHANGE(IDC_YEAR, OnChangeYear)
  20. ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_YEAR, OnDeltaposSpinYear)
  21. ON_CBN_SELCHANGE(IDC_MONTH, OnSelchangeMonth)
  22. //}}AFX_MSG_MAP
  23. // Standard printing commands
  24. ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
  25. ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
  26. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CEx101View construction/destruction
  30. CEx101View::CEx101View()
  31. : CFormView(CEx101View::IDD)
  32. {
  33. //{{AFX_DATA_INIT(CEx101View)
  34. m_nYear = 0;
  35. m_nMonPro = 0;
  36. m_strMonMem = _T("");
  37. m_strRiseRate = _T("");
  38. m_nCurrentMonth=0; //0代表1月
  39. //}}AFX_DATA_INIT
  40. // TODO: add construction code here
  41. }
  42. CEx101View::~CEx101View()
  43. {
  44. }
  45. void CEx101View::DoDataExchange(CDataExchange* pDX)
  46. {
  47. CFormView::DoDataExchange(pDX);
  48. //{{AFX_DATA_MAP(CEx101View)
  49. DDX_Control(pDX, IDC_MONTH, m_ctrlMonthList);
  50. DDX_Text(pDX, IDC_YEAR, m_nYear);
  51. DDV_MinMaxInt(pDX, m_nYear, 2005, 2008);
  52. DDX_Text(pDX, IDC_MON_PRO, m_nMonPro);
  53. DDX_Text(pDX, IDC_MON_MEM, m_strMonMem);
  54. DDX_Text(pDX, IDC_RISERATE, m_strRiseRate);
  55. DDX_Control(pDX, IDC_YEAE_PRO, m_YearPro);
  56. //}}AFX_DATA_MAP
  57. }
  58. BOOL CEx101View::PreCreateWindow(CREATESTRUCT& cs)
  59. {
  60. // TODO: Modify the Window class or styles here by modifying
  61. //  the CREATESTRUCT cs
  62. return CFormView::PreCreateWindow(cs);
  63. }
  64. void CEx101View::OnInitialUpdate()
  65. {
  66. CFormView::OnInitialUpdate();
  67. ResizeParentToFit();
  68. CEx101Doc *pDoc=GetDocument();
  69. m_nYear=pDoc->m_nYear; //获取文档中的年份
  70. m_ctrlMonthList.SetCurSel(0);//选择一月
  71. m_nCurrentMonth=0; //当前月是一月
  72. m_nMonPro=pDoc->m_Month[0].nProduct;//一月产值
  73. m_strMonMem=pDoc->m_Month[0].sNote;//一月备注
  74. m_strRiseRate="第一月无此值";
  75. CString str;
  76. str.Format("%d",pDoc->m_nTotalProduct);
  77. m_YearPro.SetCaption(str);
  78. //调用CLableControl设置标题函数显示年总产值
  79. UpdateData(false);
  80. }
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CEx101View printing
  83. BOOL CEx101View::OnPreparePrinting(CPrintInfo* pInfo)
  84. {
  85. // default preparation
  86. return DoPreparePrinting(pInfo);
  87. }
  88. void CEx101View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  89. {
  90. // TODO: add extra initialization before printing
  91. }
  92. void CEx101View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  93. {
  94. // TODO: add cleanup after printing
  95. }
  96. void CEx101View::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
  97. {
  98. // TODO: add customized printing code here
  99. }
  100. /////////////////////////////////////////////////////////////////////////////
  101. // CEx101View diagnostics
  102. #ifdef _DEBUG
  103. void CEx101View::AssertValid() const
  104. {
  105. CFormView::AssertValid();
  106. }
  107. void CEx101View::Dump(CDumpContext& dc) const
  108. {
  109. CFormView::Dump(dc);
  110. }
  111. CEx101Doc* CEx101View::GetDocument() // non-debug version is inline
  112. {
  113. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEx101Doc)));
  114. return (CEx101Doc*)m_pDocument;
  115. }
  116. #endif //_DEBUG
  117. /////////////////////////////////////////////////////////////////////////////
  118. // CEx101View message handlers
  119. void CEx101View::OnChangeMonMem() 
  120. {
  121. // TODO: If this is a RICHEDIT control, the control will not
  122. // send this notification unless you override the CFormView::OnInitDialog()
  123. // function and call CRichEditCtrl().SetEventMask()
  124. // with the ENM_CHANGE flag ORed into the mask.
  125. CEx101Doc* pDoc=GetDocument();
  126. UpdateData(); //获取最新输入数据
  127. //和文档中的数据比较,看是否有变化
  128. if(strcmp(pDoc->m_Month[m_nCurrentMonth].sNote,m_strMonMem))
  129. {
  130. //记录新数据
  131. strcpy(pDoc->m_Month[m_nCurrentMonth].sNote,m_strMonMem);
  132. pDoc->SetModifiedFlag(); //设置文档改变标志
  133. }
  134. }
  135. void CEx101View::OnChangeMonPro() 
  136. {
  137. // TODO: If this is a RICHEDIT control, the control will not
  138. // send this notification unless you override the CFormView::OnInitDialog()
  139. // function and call CRichEditCtrl().SetEventMask()
  140. // with the ENM_CHANGE flag ORed into the mask.
  141. CEx101Doc* pDoc=GetDocument();
  142. UpdateData(); //获取输入的月份值
  143. if(pDoc->m_Month[m_nCurrentMonth].nProduct!=m_nMonPro)
  144. {//比较判断数据是否改变,并改变总产值
  145. pDoc->m_nTotalProduct+=m_nMonPro-pDoc->m_Month[m_nCurrentMonth].nProduct;
  146. CString str;
  147. str.Format("%d",pDoc->m_nTotalProduct);
  148. m_YearPro.SetCaption(str);//显示总产值
  149. pDoc->m_Month[m_nCurrentMonth].nProduct=m_nMonPro;
  150. //记录当月产值,并计算增长率
  151. if(m_nCurrentMonth==0)
  152. m_strRiseRate="第一月无此值";
  153. else if(pDoc->m_Month[m_nCurrentMonth-1].nProduct==0)
  154. m_strRiseRate="上月无产值";
  155. else
  156. m_strRiseRate.Format("%.2f%%",
  157. (pDoc->m_Month[m_nCurrentMonth].nProduct-pDoc->m_Month[m_nCurrentMonth-1].nProduct)/
  158. (float)(pDoc->m_Month[m_nCurrentMonth-1].nProduct)*100);
  159. pDoc->SetModifiedFlag();
  160. UpdateData(false);
  161. }
  162. }
  163. void CEx101View::OnChangeYear() 
  164. {
  165. // TODO: If this is a RICHEDIT control, the control will not
  166. // send this notification unless you override the CFormView::OnInitDialog()
  167. // function and call CRichEditCtrl().SetEventMask()
  168. // with the ENM_CHANGE flag ORed into the mask.
  169. CEx101Doc* pDoc=GetDocument();
  170. UpdateData();//获取最新输入
  171. if(pDoc->m_nYear!=m_nYear)
  172. {//判断数据变化
  173. pDoc->m_nYear=m_nYear;//记录到Doc中
  174. pDoc->SetModifiedFlag();//设置修改标志
  175. }
  176. }
  177. void CEx101View::OnDeltaposSpinYear(NMHDR* pNMHDR, LRESULT* pResult) 
  178. {
  179. NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
  180. UpdateData();//获取最新输入
  181. if((pNMUpDown->iDelta>0)&&(m_nYear>0))
  182. m_nYear--;//减小年份并且不能小于0
  183. else if(pNMUpDown->iDelta<0)
  184. m_nYear++;//增加年份
  185. else //非法输入
  186. {
  187. AfxMessageBox("年份必须是非负数!");
  188. *pResult=0;
  189. return;
  190. }
  191. GetDocument()->m_nYear=m_nYear;//文档记录年份
  192. GetDocument()->SetModifiedFlag();
  193. UpdateData(FALSE);
  194. *pResult = 0;
  195. }
  196. void CEx101View::OnSelchangeMonth() 
  197. {
  198. CEx101Doc* pDoc=GetDocument();
  199. //获得当前选择月份并设置正确显示
  200. m_nCurrentMonth=m_ctrlMonthList.GetCurSel();
  201. //计算这个月增长率
  202. if(m_nCurrentMonth==0) //是一月?
  203. m_strRiseRate="第一月无此值!";
  204. else if(pDoc->m_Month[m_nCurrentMonth-1].nProduct==0)
  205. m_strRiseRate="上月无产值";
  206. else //计算增长率
  207. m_strRiseRate.Format("%.2f%%",(pDoc->m_Month[m_nCurrentMonth].nProduct-
  208. pDoc->m_Month[m_nCurrentMonth-1].nProduct)/
  209. (float)(pDoc->m_Month[m_nCurrentMonth-1].nProduct)*100);
  210. //获得当月产值和备注
  211. m_nMonPro=pDoc->m_Month[m_nCurrentMonth].nProduct;
  212. m_strMonMem=pDoc->m_Month[m_nCurrentMonth].sNote;
  213. UpdateData(FALSE);
  214. }