ComplexCalculatorDlg.cpp
上传用户:weigute
上传日期:2007-03-02
资源大小:1287k
文件大小:8k
源码类别:

数学计算

开发平台:

Visual C++

  1. // ComplexCalculatorDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ComplexCalculator.h"
  5. #include "ComplexCalculatorDlg.h"
  6. #include "Complex.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CAboutDlg dialog used for App About
  14. class CAboutDlg : public CDialog
  15. {
  16. public:
  17. CAboutDlg();
  18. // Dialog Data
  19. //{{AFX_DATA(CAboutDlg)
  20. enum { IDD = IDD_ABOUTBOX };
  21. //}}AFX_DATA
  22. // ClassWizard generated virtual function overrides
  23. //{{AFX_VIRTUAL(CAboutDlg)
  24. protected:
  25. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  26. //}}AFX_VIRTUAL
  27. // Implementation
  28. protected:
  29. //{{AFX_MSG(CAboutDlg)
  30. //}}AFX_MSG
  31. DECLARE_MESSAGE_MAP()
  32. };
  33. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  34. {
  35. //{{AFX_DATA_INIT(CAboutDlg)
  36. //}}AFX_DATA_INIT
  37. }
  38. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  39. {
  40. CDialog::DoDataExchange(pDX);
  41. //{{AFX_DATA_MAP(CAboutDlg)
  42. //}}AFX_DATA_MAP
  43. }
  44. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  45. //{{AFX_MSG_MAP(CAboutDlg)
  46. // No message handlers
  47. //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CComplexCalculatorDlg dialog
  51. CComplexCalculatorDlg::CComplexCalculatorDlg(CWnd* pParent /*=NULL*/)
  52. : CDialog(CComplexCalculatorDlg::IDD, pParent)
  53. {
  54. //{{AFX_DATA_INIT(CComplexCalculatorDlg)
  55. m_dblA = 0.0;
  56. m_dblB = 0.0;
  57. m_dblC = 0.0;
  58. m_dblD = 0.0;
  59. m_strResult = _T("");
  60. //}}AFX_DATA_INIT
  61. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  62. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  63. }
  64. void CComplexCalculatorDlg::DoDataExchange(CDataExchange* pDX)
  65. {
  66. CDialog::DoDataExchange(pDX);
  67. //{{AFX_DATA_MAP(CComplexCalculatorDlg)
  68. DDX_Text(pDX, IDC_EDIT1, m_dblA);
  69. DDX_Text(pDX, IDC_EDIT2, m_dblB);
  70. DDX_Text(pDX, IDC_EDIT3, m_dblC);
  71. DDX_Text(pDX, IDC_EDIT4, m_dblD);
  72. DDX_Text(pDX, IDC_EDIT5, m_strResult);
  73. //}}AFX_DATA_MAP
  74. }
  75. BEGIN_MESSAGE_MAP(CComplexCalculatorDlg, CDialog)
  76. //{{AFX_MSG_MAP(CComplexCalculatorDlg)
  77. ON_WM_SYSCOMMAND()
  78. ON_WM_PAINT()
  79. ON_WM_QUERYDRAGICON()
  80. ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
  81. ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
  82. ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
  83. ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
  84. ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
  85. ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
  86. ON_BN_CLICKED(IDC_BUTTON10, OnButton10)
  87. ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
  88. ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
  89. ON_BN_CLICKED(IDC_BUTTON9, OnButton9)
  90. //}}AFX_MSG_MAP
  91. END_MESSAGE_MAP()
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CComplexCalculatorDlg message handlers
  94. BOOL CComplexCalculatorDlg::OnInitDialog()
  95. {
  96. CDialog::OnInitDialog();
  97. // Add "About..." menu item to system menu.
  98. // IDM_ABOUTBOX must be in the system command range.
  99. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  100. ASSERT(IDM_ABOUTBOX < 0xF000);
  101. CMenu* pSysMenu = GetSystemMenu(FALSE);
  102. if (pSysMenu != NULL)
  103. {
  104. CString strAboutMenu;
  105. strAboutMenu.LoadString(IDS_ABOUTBOX);
  106. if (!strAboutMenu.IsEmpty())
  107. {
  108. pSysMenu->AppendMenu(MF_SEPARATOR);
  109. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  110. }
  111. }
  112. // Set the icon for this dialog.  The framework does this automatically
  113. //  when the application's main window is not a dialog
  114. SetIcon(m_hIcon, TRUE); // Set big icon
  115. SetIcon(m_hIcon, FALSE); // Set small icon
  116. // TODO: Add extra initialization here
  117. return TRUE;  // return TRUE  unless you set the focus to a control
  118. }
  119. void CComplexCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam)
  120. {
  121. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  122. {
  123. CAboutDlg dlgAbout;
  124. dlgAbout.DoModal();
  125. }
  126. else
  127. {
  128. CDialog::OnSysCommand(nID, lParam);
  129. }
  130. }
  131. // If you add a minimize button to your dialog, you will need the code below
  132. //  to draw the icon.  For MFC applications using the document/view model,
  133. //  this is automatically done for you by the framework.
  134. void CComplexCalculatorDlg::OnPaint() 
  135. {
  136. if (IsIconic())
  137. {
  138. CPaintDC dc(this); // device context for painting
  139. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  140. // Center icon in client rectangle
  141. int cxIcon = GetSystemMetrics(SM_CXICON);
  142. int cyIcon = GetSystemMetrics(SM_CYICON);
  143. CRect rect;
  144. GetClientRect(&rect);
  145. int x = (rect.Width() - cxIcon + 1) / 2;
  146. int y = (rect.Height() - cyIcon + 1) / 2;
  147. // Draw the icon
  148. dc.DrawIcon(x, y, m_hIcon);
  149. }
  150. else
  151. {
  152. CDialog::OnPaint();
  153. }
  154. }
  155. // The system calls this to obtain the cursor to display while the user drags
  156. //  the minimized window.
  157. HCURSOR CComplexCalculatorDlg::OnQueryDragIcon()
  158. {
  159. return (HCURSOR) m_hIcon;
  160. }
  161. // 乘法
  162. void CComplexCalculatorDlg::OnButton1() 
  163. {
  164. // 获取数据
  165. UpdateData();
  166. // 构造复数
  167. CComplex cpxA(m_dblA, m_dblB);
  168. CComplex cpxB(m_dblC, m_dblD);
  169. // 计算复数乘法
  170. CComplex cpxC = cpxA*cpxB;
  171. // 将结果转化为字符串
  172. m_strResult = cpxC.ToString();
  173. // 显示结果
  174. UpdateData(FALSE);
  175. }
  176. // 除法
  177. void CComplexCalculatorDlg::OnButton2() 
  178. {
  179. // 获取数据
  180. UpdateData();
  181. // 构造复数
  182. CComplex cpxA(m_dblA, m_dblB);
  183. CComplex cpxB(m_dblC, m_dblD);
  184. // 计算复数除法
  185. CComplex cpxC = cpxA/cpxB;
  186. // 将结果转化为字符串
  187. m_strResult = cpxC.ToString();
  188. // 显示结果
  189. UpdateData(FALSE);
  190. }
  191. // 根
  192. void CComplexCalculatorDlg::OnButton3() 
  193. {
  194. // 获取数据
  195. UpdateData();
  196. // 构造复数
  197. CComplex cpxA(m_dblA, m_dblB);
  198. // 根次
  199. int n = (int)m_dblC;
  200. // 构造存储根的复数组
  201. CComplex* pcpxR = new CComplex[n];
  202. // 计算复数的根
  203. cpxA.Root(n, pcpxR);
  204. // 将结果转化为字符串
  205. m_strResult = "";
  206. for (int i=0; i<n; ++i)
  207. {
  208. m_strResult += pcpxR[i].ToString();
  209. if (i != n-1)
  210. m_strResult += ", ";
  211. }
  212. // 显示结果
  213. UpdateData(FALSE);
  214. }
  215. // 模
  216. void CComplexCalculatorDlg::OnButton4() 
  217. {
  218. // 获取数据
  219. UpdateData();
  220. // 构造复数
  221. CComplex cpxA(m_dblA, m_dblB);
  222. // 计算复数模,并将结果转化为字符串
  223. m_strResult.Format("%f", cpxA.Abs());
  224. // 显示结果
  225. UpdateData(FALSE);
  226. }
  227. // 自然对数
  228. void CComplexCalculatorDlg::OnButton6() 
  229. {
  230. // 获取数据
  231. UpdateData();
  232. // 构造复数
  233. CComplex cpxA(m_dblA, m_dblB);
  234. // 计算复数自然对数,并将结果转化为字符串
  235. m_strResult = cpxA.Log().ToString();
  236. // 显示结果
  237. UpdateData(FALSE);
  238. }
  239. // 实幂
  240. void CComplexCalculatorDlg::OnButton5() 
  241. {
  242. // 获取数据
  243. UpdateData();
  244. // 构造复数
  245. CComplex cpxA(m_dblA, m_dblB);
  246. // 计算复数的实数幂
  247. CComplex cpxC = cpxA.Pow(m_dblC);
  248. // 将结果转化为字符串
  249. m_strResult = cpxC.ToString();
  250. // 显示结果
  251. UpdateData(FALSE);
  252. }
  253. // 复幂
  254. void CComplexCalculatorDlg::OnButton10() 
  255. {
  256. // 获取数据
  257. UpdateData();
  258. // 构造复数
  259. CComplex cpxA(m_dblA, m_dblB);
  260. CComplex cpxB(m_dblC, m_dblD);
  261. // 计算复数的复数幂
  262. CComplex cpxC = cpxA.Pow(cpxB, 0);
  263. // 将结果转化为字符串
  264. m_strResult = cpxC.ToString();
  265. // 显示结果
  266. UpdateData(FALSE);
  267. }
  268. // 正弦
  269. void CComplexCalculatorDlg::OnButton7() 
  270. {
  271. // 获取数据
  272. UpdateData();
  273. // 构造复数
  274. CComplex cpxA(m_dblA, m_dblB);
  275. // 计算复数的正弦,并将结果转化为字符串
  276. m_strResult = cpxA.Sin().ToString();
  277. // 显示结果
  278. UpdateData(FALSE);
  279. }
  280. // 余弦
  281. void CComplexCalculatorDlg::OnButton8() 
  282. {
  283. // 获取数据
  284. UpdateData();
  285. // 构造复数
  286. CComplex cpxA(m_dblA, m_dblB);
  287. // 计算复数的余弦,并将结果转化为字符串
  288. m_strResult = cpxA.Cos().ToString();
  289. // 显示结果
  290. UpdateData(FALSE);
  291. }
  292. // 正切
  293. void CComplexCalculatorDlg::OnButton9() 
  294. {
  295. // 获取数据
  296. UpdateData();
  297. // 构造复数
  298. CComplex cpxA(m_dblA, m_dblB);
  299. // 计算复数的正切,并将结果转化为字符串
  300. m_strResult = cpxA.Tan().ToString();
  301. // 显示结果
  302. UpdateData(FALSE);
  303. }