home *** CD-ROM | disk | FTP | other *** search
/ CICA 1995 September (Japanese) / CICA Shareware for Windows CD-ROM (Walnut Creek) (September 1995) (Japanese) (Disc 2).iso / disc2 / patches / symantec / mfcsim.exe / SIMNEW.EXE / MFC / SAMPLES / CALC / USERCODE.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-06  |  6.7 KB  |  273 lines

  1. // Filename: USERCODE.CPP                                   
  2. // "CALC" Generated by Visual Programmer
  3. // Author:   Blue Sky                                       
  4.  
  5. // 
  6. // ***********************************************************************
  7. // Code in this file is initially generated by the Switch-It Module.
  8. // This file contains functions you can change
  9. // to provide whatever functionality you require.
  10. // 
  11. // 
  12. // 
  13. // For more information,
  14. // see the section "How code is generated" in the documentation.
  15. // 
  16. // ***********************************************************************
  17. // 
  18.  
  19. #include "AFXWIN.H"
  20. #include <limits.h>
  21. #include <stdlib.h>
  22. #include <string.h>
  23. #include <ctype.h>
  24. #include "CALC.H"
  25.  
  26. WMPDEBUG
  27.  
  28. #ifdef _DEBUG
  29. #undef THIS_FILE
  30. static char BASED_CODE THIS_FILE[] = __FILE__;
  31. #endif
  32.  
  33.  
  34. #include "USERCODE.WMC"
  35.     
  36.     
  37.     
  38.  
  39.  
  40.  
  41. // *************************************************************
  42. // Class definition for Class: Cwm_CALCClientDlg
  43. // Base Class                : Cwm_CALCClientBaseDlg
  44. // Derived from MFC Class    : CFormView
  45. // *************************************************************
  46.  
  47. class Cwm_CALCClientDlg : public Cwm_CALCClientBaseDlg
  48. {
  49. public:
  50.     Cwm_CALCClientDlg(LPCSTR lpszTemplateName);
  51.     Cwm_CALCClientDlg() : Cwm_CALCClientBaseDlg() {};
  52.  
  53. #ifdef _DEBUG
  54.     virtual void AssertValid() const;
  55.     virtual void Dump(CDumpContext& dc) const;
  56. #endif
  57.  
  58.     virtual BOOL OnInitDialog();
  59.  
  60.     // YOU CAN ADD YOUR OWN CODE HERE
  61.  
  62.  
  63. protected:
  64.     BOOL  bNewNumber;
  65.     short sOperator;
  66.     DWORD dwNumber;
  67.     DWORD dwFirstNum;
  68.  
  69. protected:
  70.     //{{SIM_MSG_PROTO(Cwm_CALCClientDlg)
  71.     // DO NOT EDIT what you see in this block of generated code.
  72.     virtual BOOL OnCommand(WPARAM wParam,LPARAM lParam);
  73.     //}}SIM_MSG_PROTO(Cwm_CALCClientDlg)
  74.  
  75. public:
  76.     void DisplayNumber(DWORD dwNumber);
  77.     BOOL CalcInput(UINT wButton);
  78.     DWORD Calculate (DWORD dwFirstNum,short sOperator,DWORD dwNum);
  79.  
  80. protected:
  81.     virtual BOOL PreTranslateMessage( MSG* pMsg);
  82.     virtual void DoDataExchange(CDataExchange* pDX);   // DDX/DDV support
  83.  
  84.     DECLARE_DYNCREATE(Cwm_CALCClientDlg)
  85.  
  86.     DECLARE_MESSAGE_MAP()
  87.  
  88. };
  89.  
  90.  
  91. // *************************************************************
  92. //   C Startup function client area controls CALCULATOR
  93. // *************************************************************
  94.  
  95. CWnd* BLD_CALCClientClFunc (CWnd* pWnd)
  96. {
  97.     Cwm_CALCClientDlg*    pTheClientDlg;
  98.     pTheClientDlg = new Cwm_CALCClientDlg("CALCULATOR");
  99.     if(!pTheClientDlg->Create(pWnd))
  100.         {
  101.         BLDDisplayMessage (::GetActiveWindow (), BLD_CannotCreate,
  102.             "CALCULATOR", MB_OK | MB_ICONHAND);
  103.         return NULL;
  104.         }
  105.     return pTheClientDlg;
  106. }
  107.  
  108.  
  109.  
  110. // *************************************************************
  111. // Member Functions for Class: Cwm_CALCClientDlg
  112. // Base Class                : Cwm_CALCClientBaseDlg
  113. // Derived from MFC Class    : CFormView
  114. // *************************************************************
  115.  
  116. Cwm_CALCClientDlg::Cwm_CALCClientDlg(LPCSTR lpszTemplateName)
  117.   : Cwm_CALCClientBaseDlg(lpszTemplateName)
  118. {
  119.     bNewNumber         = TRUE;
  120.     sOperator       = '=';
  121.     dwNumber        = 0L;
  122.     dwFirstNum         = 0L;
  123. }
  124.  
  125.  
  126.  
  127. BOOL Cwm_CALCClientDlg::OnInitDialog()
  128. {
  129.     return Cwm_CALCClientBaseDlg::OnInitDialog();
  130. }
  131.  
  132.  
  133. IMPLEMENT_DYNCREATE(Cwm_CALCClientDlg, Cwm_CALCClientBaseDlg)
  134.  
  135. BEGIN_MESSAGE_MAP(Cwm_CALCClientDlg, Cwm_CALCClientBaseDlg)
  136.  
  137.     // YOU CAN ADD YOUR OWN CODE HERE
  138.  
  139.     //{{SIM_MSG_MAP(Cwm_CALCClientDlg)
  140.     // DO NOT EDIT what you see in this block of generated code.
  141.     //}}SIM_MSG_MAP(Cwm_CALCClientDlg)
  142.  
  143. END_MESSAGE_MAP()
  144.  
  145.  
  146. BOOL Cwm_CALCClientDlg::PreTranslateMessage(MSG* pMsg)
  147. {
  148.     HWND        hButton;
  149.     WPARAM        wParam;
  150.  
  151.     if (pMsg->message==WM_CHAR)
  152.         {
  153.         wParam    = pMsg->wParam;
  154.         if ((wParam = toupper (wParam)) == VK_RETURN)
  155.             wParam = '=' ;
  156.  
  157.         if (hButton = ::GetDlgItem(GetSafeHwnd(),wParam))
  158.             {
  159.              ::SendMessage(hButton,BM_SETSTATE,1,0L);
  160.              ::SendMessage(hButton,BM_SETSTATE,0,0L);
  161.              CalcInput(wParam);
  162.             return TRUE;
  163.              }
  164.         }
  165.     return Cwm_CALCClientBaseDlg::PreTranslateMessage(pMsg);
  166. }
  167.  
  168.  
  169. // Sorting out the different types of input
  170. BOOL Cwm_CALCClientDlg::CalcInput(UINT wButton)
  171. {
  172.  
  173.     if (wButton == VK_ESCAPE)                  // escape
  174.          DisplayNumber (dwNumber = 0L);
  175.  
  176.     else if (isdigit(wButton))               // digit
  177.          {
  178.          if (bNewNumber)
  179.               {
  180.               dwFirstNum = dwNumber ;
  181.               dwNumber = 0L ;
  182.               }
  183.          bNewNumber = FALSE ;
  184.          if (dwNumber <= ULONG_MAX >> 4)
  185.               DisplayNumber (dwNumber = 10 * dwNumber + wButton- '0') ;
  186.          else
  187.               MessageBeep (0) ;
  188.          }
  189.  
  190.     else                                      // operator
  191.          {
  192.          if (!bNewNumber)
  193.               DisplayNumber(dwNumber=Calculate(dwFirstNum,sOperator,dwNumber));
  194.          bNewNumber = TRUE;
  195.          sOperator     = wButton;
  196.          }
  197.     return TRUE;
  198. }
  199.  
  200.  
  201. // Perform calculation using the operator and numbers
  202. DWORD Cwm_CALCClientDlg::Calculate (DWORD dwFirstNum,short sOperator,DWORD dwNum)
  203.      {
  204.      switch (sOperator)
  205.           {
  206.           case '=' : return dwNum ;
  207.           case '+' : return dwFirstNum +  dwNum ;
  208.           case '-' : return dwFirstNum -  dwNum ;
  209.           case '*' : return dwFirstNum *  dwNum ;
  210.           case '/' : return dwNum ? dwFirstNum / dwNum : ULONG_MAX ;
  211.           default  : return 0L ;
  212.           }
  213.      }
  214.  
  215. // Display number in result (VK_ESCAPE) push button
  216. void Cwm_CALCClientDlg::DisplayNumber(DWORD dwNumber)
  217. {
  218.     char  szText[20];
  219.  
  220.     SetDlgItemText(ID_DISPLAY,_strupr (_ltoa (dwNumber,szText,10))) ;
  221. }
  222.  
  223.  
  224. //{{SIM_MSG_BODY(Cwm_CALCClientDlg)
  225. // Message Handler Functions for you to edit will come here.
  226.  
  227.  
  228.  
  229.  
  230. // MESSAGE HANDLER
  231. BOOL Cwm_CALCClientDlg::OnCommand(WPARAM wParam,LPARAM lParam)
  232. {
  233.     SetFocus(); 
  234.     CalcInput(wParam);
  235.     // Insert your code here
  236.     return Cwm_CALCClientBaseDlg::OnCommand(wParam,lParam);
  237. }
  238. //}}SIM_MSG_BODY(Cwm_CALCClientDlg)
  239.  
  240.  
  241.  
  242. void Cwm_CALCClientDlg::DoDataExchange(CDataExchange* pDX)
  243. {
  244.     Cwm_CALCClientBaseDlg::DoDataExchange(pDX);
  245.  
  246.     // YOU CAN ADD YOUR OWN CODE HERE
  247.  
  248.  
  249.     //{{SIM_DATA_MAP(Cwm_CALCClientDlg)
  250.     // DO NOT EDIT what you see in this block of generated code.
  251.  
  252.     //}}SIM_DATA_MAP
  253. }
  254.  
  255.  
  256.  
  257. // *************************************************************
  258. // Cwm_CALCClientDlg diagnostics
  259.  
  260. #ifdef _DEBUG
  261. void Cwm_CALCClientDlg::AssertValid() const
  262. {
  263.     Cwm_CALCClientBaseDlg::AssertValid();
  264. }
  265.  
  266. void Cwm_CALCClientDlg::Dump(CDumpContext& dc) const
  267. {
  268.     Cwm_CALCClientBaseDlg::Dump(dc);
  269. }
  270.  
  271. #endif //_DEBUG
  272.  
  273.