简单计算器(应用软件)

由于刚接触MFC类库,所以做了个简单计算器软件。

计算器名:“老高”计算器

用途:简单计算

制作者:老高

简介:

一、     设计思路

1.由于第一做此类作品以及时间紧迫,模仿了微软的计算器,但只实现了小部分功能。为了以图形界面方式实现,使用了VC++6.0编译器的MFC类库,以及凝霜界面库(第三方界面库,采用DDE机制,界面元素完全自绘),主要语言是C++。

2.采用工程模式,文件包括DailyDlg.h(运算主函数头文件,包括其辅助函数)、NsGuiEdit.h(凝霜界面库中自绘编辑框头文件)、NsGuiButton.h(凝霜界面库中自绘按钮头文件)、DailyDlg.cpp(代码库主文件,包括各操作函数)、NsGuiButton.cpp(凝霜界面库中自绘按钮头实现文件,包括界面按钮函数的实现)、NsGuiEdit.cpp(凝霜界面库中自绘编辑框实现文件,包括界面编辑框函数实现)以及一些其他附属文件。

二、技术实现

1.实现的功能有:+(加)、—(减)、*(乘)、/(除)、sin(正弦)、cos(余弦)、tan(正切)、X^n(x的n次方)、mod(求余运算)、sqrt(开方运算)、clear(清零)、小数点、正负号以及退出。

2.由于此计算器又三个对话框,上边的数字1和数字2对话框输入两个待运算数值,然后输入运算符,结果显示在下边的框里,比如要实现3+2=5,则首先点击数值1对话框输入数据3,然后点击数值2对话框输入数据2,最后单击运算符“+”,便得计算结果;若只有一个操作符,则随便点击任意个对话框(数值1或数值2),输入数据,然后输入运算符,即可输出结果。

3.注意:我把“=”按钮设成对操作结果取整的操作,由于输入完数据和操作符后就会出结果,所以“=”按钮使得结果变为整数(四舍五入)。

4.由于时间紧迫,对功能不够完善,对于输入的数据设为浮点型,令其保留4位小数,但进行三角函数计算时就保留8位小数,确保精度。对于小数点的输入,当输入的小数点位数大于4位时,将把小数位数扩展为8位,确保精度。

5.由于考虑不周到,次计算器不能实现大数运算,对一般的整数部分为十位以内的运算没问题。

主要代码实现:

// DailyDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Daily.h"
#include "DailyDlg.h"
#include <cmath>
#include <cstdlib>
#include <cstdio>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define M_PI 3.1415926

/
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
 CAboutDlg();
// Dialog Data
 //{{AFX_DATA(CAboutDlg)
 enum { IDD = IDD_ABOUTBOX };
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CAboutDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:
 //{{AFX_MSG(CAboutDlg)
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
 //{{AFX_DATA_INIT(CAboutDlg)
 //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CAboutDlg)
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
 //{{AFX_MSG_MAP(CAboutDlg)
  // No message handlers
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CDailyDlg dialog

CDailyDlg::CDailyDlg(CWnd* pParent )
 : CDialog(CDailyDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CDailyDlg)
 firstnum=0.0;
 secondnum=0.0;
 lastnum=0.0;
 pointone=0;
 pointtwo=0;
 rema=0;
 remb=0;
 xiaoshu=0.0;
  // NOTE: the ClassWizard will add member initialization here
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDailyDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CDailyDlg)
 DDX_Text(pDX, IDC_EDIT1, firstnum);
 DDX_Text(pDX, IDC_EDIT2, secondnum);
 DDX_Text(pDX, IDC_show, lastnum);
 DDX_Control(pDX, IDC_0, btn[0]);
 DDX_Control(pDX, IDC_1, btn[1]);
 DDX_Control(pDX, IDC_2, btn[2]);
 DDX_Control(pDX, IDC_3, btn[3]);
 DDX_Control(pDX, IDC_4, btn[4]);
 DDX_Control(pDX, IDC_5, btn[5]);
 DDX_Control(pDX, IDC_6, btn[6]);
 DDX_Control(pDX, IDC_7, btn[7]);
 DDX_Control(pDX, IDC_8, btn[8]);
 DDX_Control(pDX, IDC_9, btn[9]);
 DDX_Control(pDX, IDC_zhengfu, btn[10]);
 DDX_Control(pDX, IDC_xiaoshudian, btn[11]);
 DDX_Control(pDX, IDC_jian, btn[12]);
 DDX_Control(pDX, IDC_cheng, btn[13]);
 DDX_Control(pDX, IDC_chu, btn[14]);
 DDX_Control(pDX, IDC_jia, btn[15]);
 DDX_Control(pDX, IDC_he, btn[16]);
 DDX_Control(pDX, IDC_daoshu, btn[17]);
 DDX_Control(pDX, IDC_kaifang, btn[18]);
 DDX_Control(pDX, IDC_qiuyu, btn[19]);
 DDX_Control(pDX, IDC_zhengqie, btn[20]);
 DDX_Control(pDX, IDC_yuxian, btn[21]);
 DDX_Control(pDX, IDC_zhenxian, btn[22]);
 DDX_Control(pDX, IDC_ncifang, btn[23]);
 DDX_Control(pDX, IDC_clear, btn[24]);
 DDX_Control(pDX, IDC_show, edit[0]);
 DDX_Control(pDX, IDC_EDIT1, edit[1]);
 DDX_Control(pDX, IDC_EDIT2, edit[2]);
 DDX_Control(pDX, IDC_BUTTON6, btn[25]);
 DDX_Control(pDX, IDC_BUTTON5, btn[26]);
 
  // NOTE: the ClassWizard will add DDX and DDV calls here
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDailyDlg, CDialog)
 //{{AFX_MSG_MAP(CDailyDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_1, On1)
 ON_BN_CLICKED(IDC_2, On2)
 ON_BN_CLICKED(IDC_3, On3)
 ON_BN_CLICKED(IDC_jia, Onjia)
 ON_BN_CLICKED(IDC_4, On4)
 ON_BN_CLICKED(IDC_5, On5)
 ON_BN_CLICKED(IDC_6, On6)
 ON_BN_CLICKED(IDC_jian, Onjian)
 ON_BN_CLICKED(IDC_daoshu, Ondaoshu)
 ON_BN_CLICKED(IDC_7, On7)
 ON_BN_CLICKED(IDC_9, On9)
 ON_BN_CLICKED(IDC_cheng, Oncheng)
 ON_BN_CLICKED(IDC_kaifang, Onkaifang)
 ON_BN_CLICKED(IDC_zhengfu, Onzhengfu)
 ON_BN_CLICKED(IDC_0, On0)
 ON_BN_CLICKED(IDC_xiaoshudian, Onxiaoshudian)
 ON_BN_CLICKED(IDC_chu, Onchu)
 ON_BN_CLICKED(IDC_qiuyu, Onqiuyu)
 ON_BN_CLICKED(IDC_he, Onhe)
 ON_BN_CLICKED(IDC_zhengqie, Onzhengqie)
 ON_BN_CLICKED(IDC_yuxian, Onyuxian)
 ON_BN_CLICKED(IDC_zhenxian, Onzhenxian)
 ON_BN_CLICKED(IDC_ncifang, Onncifang)
 ON_BN_CLICKED(IDC_8, On8)
 ON_EN_CHANGE(IDC_show, OnChangeshow)
 ON_BN_CLICKED(IDC_clear, Onclear)
 ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
 ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2)
 ON_EN_SETFOCUS(IDC_EDIT1, OnSetfocusEdit1)
 ON_EN_SETFOCUS(IDC_EDIT2, OnSetfocusEdit2)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CDailyDlg message handlers

BOOL CDailyDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 flag=0;
 // Add "About..." menu item to system menu.

 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon
 
 // TODO: Add extra initialization here
 //CDC* pWinDC = GetWindowDC();
 //if (pWinDC)
 // DrawNCFrame(pWinDC);
 //ReleaseDC(pWinDC);

 return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDailyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CDailyDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // device context for painting

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  // Center icon in client rectangle
  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;

  // Draw the icon
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CDialog::OnPaint();
 }
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CDailyDlg::OnQueryDragIcon()
{
 return (HCURSOR) m_hIcon;
}

void CDailyDlg::On1()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+1;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=1*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+1;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=1*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::On2()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+2;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=2*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+2;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=2*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::On3()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+3;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=3*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+3;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=3*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
 
}

void CDailyDlg::On4()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+4;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=4*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+4;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=4*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::On5()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+5;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=5*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+5;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=5*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::On6()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+6;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=6*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+6;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=6*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::On7()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+7;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=7*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+7;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=7*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::On8()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+8;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=8*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+8;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=8*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::On9()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+9;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=9*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+9;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=9*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::On0()
{
 char cc[100];
 double t=1.0; //小数点后位数
 if(flag==1)
 {
  if(pointone==0)
  {
   firstnum=firstnum*10+0;
   sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  }
  else
  {
   rema++; 
   for(int j=0;j<rema;j++)
   {
    t*=0.1;
   }
   firstnum+=0*t;
   if(rema>4)
    sprintf(cc,"%.8f",firstnum);
   else
    sprintf(cc,"%.4f",firstnum);
   GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
  
 }
 else
 {
  if(pointtwo==0)
  {
   secondnum=secondnum*10+0;
   sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  }
  else
  {
   remb++; 
   for(int j=0;j<remb;j++)
   {
    t*=0.1;
   }
   secondnum+=0*t;
   if(remb>4)
    sprintf(cc,"%.8f",secondnum);
   else
    sprintf(cc,"%.4f",secondnum);
   GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
  
 }
 
}

void CDailyDlg::Onjia()
{
 char cc[100];
 lastnum=firstnum+secondnum;
 sprintf(cc,"%.4f",lastnum);
 GetDlgItem(IDC_show)->SetWindowText(cc);
}

void CDailyDlg::Onjian()
{
 char cc[100];
 lastnum=firstnum-secondnum;
 sprintf(cc,"%.4f",lastnum);
 GetDlgItem(IDC_show)->SetWindowText(cc);
}

void CDailyDlg::Ondaoshu() //EXIT
{
 OnOK();
}

void CDailyDlg::Oncheng()
{
 char cc[100];
 lastnum=firstnum*secondnum;
 sprintf(cc,"%.4f",lastnum);
 GetDlgItem(IDC_show)->SetWindowText(cc);
}

void CDailyDlg::Onkaifang()
{
 char cc[100];
 if(flag==1)
 {
  lastnum=sqrt(firstnum);
  sprintf(cc,"%.4f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 }
 else
 {
  lastnum=sqrt(firstnum);
  sprintf(cc,"%.4f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 }
 
}

void CDailyDlg::Onzhengfu()
{
 char cc[100];
 if(flag==1)
 {
  firstnum*=-1.0;
  sprintf(cc,"%.4f",firstnum);
  GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
 }
 else
 {
  secondnum*=-1.0;
  sprintf(cc,"%.4f",secondnum);
  GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
 }
}

void CDailyDlg::Onxiaoshudian()
{
 char cc[100];
 if(flag==1)
 {
  pointone=1;
  sprintf(cc,"%.4f",firstnum);
  GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
 }
 else
 {
  pointtwo=1;
  sprintf(cc,"%.4f",secondnum);
  GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
 }
 
}

void CDailyDlg::Onchu()
{
 char cc[100];
 if(secondnum==0)
 {
  GetDlgItem(IDC_show)->SetWindowText("除数不能为零!!");
 }
 else
 {
  lastnum=firstnum/secondnum;
  sprintf(cc,"%.4f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 }
}

void CDailyDlg::Onqiuyu()
{
 char cc[100];
 lastnum=(int)firstnum%((int)secondnum);
 sprintf(cc,"%.4f",lastnum);
 GetDlgItem(IDC_show)->SetWindowText(cc);
}

void CDailyDlg::Onhe()
{
 char cc[100];
 sprintf(cc,"%.f",lastnum);
 GetDlgItem(IDC_show)->SetWindowText(cc);
}

void CDailyDlg::Onzhengqie()
{
 char cc[100];
 if(flag==1)
 {
  lastnum=tan((double)firstnum*M_PI/180);
  sprintf(cc,"%.8f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 
 else
 {
  lastnum=tan((double)secondnum*M_PI/180);
  sprintf(cc,"%.8f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 }
}

void CDailyDlg::Onyuxian()
{
 char cc[100];
 if(flag==1)
 {
  lastnum=cos((double)firstnum*M_PI/180);
  sprintf(cc,"%.8f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 
 else
 {
  lastnum=cos((double)secondnum*M_PI/180);
  sprintf(cc,"%.8f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 }
}

void CDailyDlg::Onzhenxian()
{
 char cc[100];
 if(flag==1)
 {
  lastnum=sin((double)firstnum*M_PI/180);
  sprintf(cc,"%.8f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 
 else
 {
  lastnum=sin((double)secondnum*M_PI/180);
  sprintf(cc,"%.8f",lastnum);
  GetDlgItem(IDC_show)->SetWindowText(cc);
 }
}

void CDailyDlg::Onncifang()
{
 char cc[100];
 double  last=1.0;
 for(int i=1;i<=secondnum;i++)
 {
  last*=firstnum;
 }
 lastnum=last;
 sprintf(cc,"%.4f",lastnum);
 GetDlgItem(IDC_show)->SetWindowText(cc);
}

void CDailyDlg::OnChangeshow()
{
}

void CDailyDlg::Onclear()
{
 char cc[100];
 firstnum=0.0;
 secondnum=0.0;
 lastnum=0.0;
 pointone=0;
 pointtwo=0;
 rema=0;
 remb=0;
 xiaoshu=0.0;
 sprintf(cc,"%d",firstnum);
 GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
 sprintf(cc,"%d",secondnum);
 GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
 sprintf(cc,"%d",lastnum);
 GetDlgItem(IDC_show)->SetWindowText(cc);
 sprintf(cc,"%d",pointone);
 GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
 sprintf(cc,"%d",pointtwo);
 GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
 /rem0~rem9归零
 sprintf(cc,"%d",rema);
 GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
 sprintf(cc,"%d",rema);
 GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
 sprintf(cc,"%d",remb);
 GetDlgItem(IDC_EDIT1)->SetWindowText(cc);
 sprintf(cc,"%d",remb);
 GetDlgItem(IDC_EDIT2)->SetWindowText(cc);
 
}

void CDailyDlg::OnChangeEdit1()
{
}

void CDailyDlg::OnChangeEdit2()
{
}

void CDailyDlg::OnSetfocusEdit1()
{
 flag=1;
}

void CDailyDlg::OnSetfocusEdit2()
{
 flag=2;
}

//huatu
void CDailyDlg::DrawCaption(CDC *pDC)
{
 CRect rectWnd, rectCaption;
 int   nOldMode = pDC->SetBkMode(TRANSPARENT);
 COLORREF clrOldText = pDC->SetTextColor(RGB(255, 255, 255));
 ::GetWindowRect(m_hWnd, &rectWnd);

 //设置文字区域
 rectCaption.left = 10;
 rectCaption.top  = 6;
 rectCaption.right = rectWnd.Width()-30;
 rectCaption.bottom = 35;

 //输出文字
 TCHAR cCaption[255];
 GetWindowText(cCaption, 255);
 pDC->DrawText(cCaption, &rectCaption, DT_LEFT);
 pDC->SetBkMode(nOldMode);
 pDC->SetTextColor(clrOldText);
}

void CDailyDlg::DrawTitleBar(CDC *pDC)
{
 CRect rectWnd;
 CDC* pMemDC=new CDC;
 CBitmap bitmapTemp, *pOldBitmap;
 int  nWidth, nHeight;

 GetWindowRect(&rectWnd);

 nWidth = rectWnd.Width();
 nHeight = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CYFRAME)+1;

 //创建位图内存
 bitmapTemp.CreateCompatibleBitmap(pDC, nWidth, nHeight);
 pMemDC->CreateCompatibleDC(pDC);
 pOldBitmap=pMemDC->SelectObject(&bitmapTemp);

 //绘制底色
    BYTE r = 34;
    BYTE g = 180;
    BYTE b = 227;

    CPen *temp = new CPen;
    CPen *pOldPen = pMemDC->SelectObject(temp);

    LONG nMiddle = nHeight / 2;
    LONG i = 0;

    for (i = nMiddle; i >= 0; --i)
    {
        CPen pen(PS_INSIDEFRAME | PS_SOLID, 1,
            RGB(r + 10 * (nMiddle - i), g + 2 * (nMiddle - i), b + (nMiddle - i)));

        pMemDC->SelectObject(&pen);
        pMemDC->MoveTo(0, i);
        pMemDC->LineTo(nWidth, i);
    }

    for (i = nMiddle; i <= nHeight; ++i)
    {
        CPen pen(PS_INSIDEFRAME | PS_SOLID, 1,
            RGB(r + 10 * (i - nMiddle), g + 2 * (i - nMiddle), b + (i - nMiddle)));

        pMemDC->SelectObject(&pen);
        pMemDC->MoveTo(0, i);
        pMemDC->LineTo(nWidth, i);
    }

    delete temp;

    pMemDC->SelectObject(pOldPen);

 //绘制标题
 DrawCaption(pMemDC);

 pDC->BitBlt(0, 0, nWidth, nHeight, pMemDC, 0, 0, SRCCOPY);
 pMemDC->SelectObject(pOldBitmap);
 ReleaseDC(pMemDC);
 delete pMemDC;
}

void CDailyDlg::DrawLeftFrame(CDC *pDC)
{
 CRect rectWnd;
 CBrush brushMain(m_clrMain);
 int  nWidth, nHeight, nOffsetY;

 GetWindowRect(&rectWnd);

 nWidth  = GetSystemMetrics(SM_CXFRAME);
 nHeight  = rectWnd.Height();
 nOffsetY = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CYFRAME)+1;

 //画主色
 CBrush *pOldBrush = pDC->SelectObject(&brushMain);
 pDC->PatBlt(0, 0, nWidth, nHeight, PATCOPY);
 pDC->SelectObject(pOldBrush);
}

void CDailyDlg::DrawRightFrame(CDC *pDC)
{
 CRect rectWnd;
 CBrush brushMain(m_clrMain);
 int  nWidth, nHeight, nOffsetY;

 GetWindowRect(&rectWnd);

 nWidth  = GetSystemMetrics(SM_CXFRAME);
 nHeight  = rectWnd.Height();
 nOffsetY = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CYFRAME)+1;

 CBrush *pOldBrush = pDC->SelectObject(&brushMain);
 pDC->PatBlt(rectWnd.Width()-nWidth, 0, nWidth, nHeight, PATCOPY);
 pDC->SelectObject(pOldBrush);
}

void CDailyDlg::DrawBottomFrame(CDC *pDC)
{
 CRect rectWnd;
 CBrush brushMain(m_clrMain);
 int  nWidth, nHeight, nOffset;

 GetWindowRect(&rectWnd);

 nWidth = rectWnd.Width();
 nHeight = GetSystemMetrics(SM_CYFRAME);
 nOffset = GetSystemMetrics(SM_CXFRAME)-1;

 CBrush *pOldBrush = pDC->SelectObject(&brushMain);
 pDC->PatBlt(0, rectWnd.Height()-nHeight, nWidth, nHeight, PATCOPY);
 pDC->SelectObject(pOldBrush);
}

void CDailyDlg::DrawNCFrame(CDC *pDC)
{
 DrawLeftFrame(pDC);
 //填充右侧框架
 DrawRightFrame(pDC);
 //填充底部框架
 DrawBottomFrame(pDC);
 //填充顶部框架
 DrawTitleBar(pDC);
}

LRESULT CDailyDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 LRESULT result=CDialog::DefWindowProc(message, wParam, lParam);

 if (!::IsWindow(m_hWnd))
  return result;

 if (message == WM_MOVE || message == WM_NCACTIVATE || message == WM_NOTIFY)
 {
  CDC* pWinDC = GetWindowDC();
  if (pWinDC)
   DrawNCFrame(pWinDC);
  ReleaseDC(pWinDC);
 }

 return result;
}

void CDailyDlg::OnNcPaint()
{
 CDC* pWinDC = GetWindowDC();
 if (pWinDC)
  DrawNCFrame(pWinDC);
 ReleaseDC(pWinDC);
}

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值