FractionDlg.cppvoid CmyfractionDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// 如果向對話方塊添加最小化按鈕,則需要下面的代碼// 來繪製該表徵圖。對於使用文檔/視圖模型的 MFC 應用程式,// 這將由架構自動完成。void CmyfractionDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // 用於繪製的裝置上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使表徵圖在工作區矩形中置中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 繪製表徵圖dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}//當使用者拖動已最小化的視窗時系統調用此函數取得游標//顯示。HCURSOR CmyfractionDlg::OnQueryDragIcon(){return static_cast<HCURSOR>(m_hIcon);}void CmyfractionDlg::OnBnClickedButton1(){// TODO: 在此添加控制項通知處理常式代碼UpdateData();if(symbol == '+'){ if(a_deno == b_deno) { c_mole = a_mole + b_mole; c_deno = a_deno; } else { c_mole = a_mole * b_deno + a_deno * b_mole; c_deno = a_deno * b_deno; }}else if(symbol == '-'){ if(a_deno == b_deno) { c_mole = a_mole - b_mole; c_deno = a_deno; } else { c_mole = a_mole * b_deno - a_deno * b_mole; c_deno = a_deno * b_deno; }}else if(symbol == '*'){c_mole = a_mole * b_mole;c_deno = a_deno * b_deno;}else if(symbol == '/'){c_mole = a_mole * b_deno;c_deno = a_deno * b_mole;}Fraction fc(c_mole, c_deno);fc.Simplify();c_mole = fc.get_mole();c_deno = fc.get_deno();UpdateData(FALSE);}Fraction.hclass
Fraction{public:Fraction(){mole = 1; deno = 1;}Fraction(int x, int y){mole = x; deno = y;}int get_mole();int get_deno();void Simplify();private:int mole;int deno;};
Fraction.cpp#include "stdafx.h"#include "Fraction.h"int Fraction::get_mole(){return mole;}int Fraction::get_deno(){return deno;}void Fraction::Simplify() { int m,n,r; m = abs(deno); n = abs(mole); while(r = m % n) // 求m,n的最大公約數 { m = n; n = r; } deno /= n; // 化簡 mole /= n; if (deno < 0) // 將分母轉化為正數 { deno = -deno; mole = -mole; } }