QQ登录

只需一步,快速开始

上位机MFC指数编辑框实例

[ 复制链接 ]
效果演示

上位机MFC指数编辑框实例

上位机MFC指数编辑框实例

例程从CEdit派生一个类CNumEdit,用于指数数字的输入和数据值的获取,
参见上图图。其成员函数 GetValue()和SetValue()使得对双精度数字进行操作时更容易。
点击按钮后,可将编辑框输入的数字显示出来

实现过程:
也是建立一个新的工程,这里建立基于对话框的工程。
界面如上图,添加编辑框,与按钮控件

2.将根目录两文件NUMEDIT.CPP,NUMEDIT.H复制与导入到自己工程项目中。
这样工程中会多出一集成类CNumEdit。
在主对话框中使用此类:包含其头文件,并添加实例
#include "NumEdit.h"

CNumEdit        m_Edit;

3.双击按钮控件,添加其点击函数
void CCTestDlg::OnButton1()
{
        // TODO: Add your control notification handler code here
        double dbValue = m_Edit.GetValue();
        CString sValue;
        sValue.Format("%lf",dbValue);
        AfxMessageBox(sValue);
}

这样例程就可以编译执行,查看效果了。

集成类的两文件可以在下面复制使用,或下载例程学习:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:CTest.rar 
文件大小:32.37 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  1. #if !defined(AFX_NUMEDIT_H__ACD85206_F566_11D1_A2DA_00609761A58B__INCLUDED_)
  2. #define AFX_NUMEDIT_H__ACD85206_F566_11D1_A2DA_00609761A58B__INCLUDED_

  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000
  6. // NumEdit.h : header file
  7. //

  8. /////////////////////////////////////////////////////////////////////////////
  9. // CNumEdit window

  10. class CNumEdit : public CEdit
  11. {
  12. // Construction
  13. public:
  14.         CNumEdit();

  15. // Attributes
  16. public:

  17. // Operations
  18. public:

  19. // Overrides
  20.         // ClassWizard generated virtual function overrides
  21.         //{{AFX_VIRTUAL(CNumEdit)
  22.         //}}AFX_VIRTUAL

  23. // Implementation
  24. public:
  25.         double GetValue();
  26.         void SetValue (double val);
  27.         virtual ~CNumEdit();

  28.         // Generated message map functions
  29. protected:
  30.         //{{AFX_MSG(CNumEdit)
  31.         afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  32.         //}}AFX_MSG

  33.         DECLARE_MESSAGE_MAP()
  34. };

  35. /////////////////////////////////////////////////////////////////////////////

  36. //{{AFX_INSERT_LOCATION}}
  37. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.

  38. #endif // !defined(AFX_NUMEDIT_H__ACD85206_F566_11D1_A2DA_00609761A58B__INCLUDED_)
复制代码
  1. #include "stdafx.h"
  2. #include "NumEdit.h"

  3. #ifdef _DEBUG
  4. #define new DEBUG_NEW
  5. #undef THIS_FILE
  6. static char THIS_FILE[] = __FILE__;
  7. #endif

  8. /////////////////////////////////////////////////////////////////////////////
  9. // CNumEdit

  10. CNumEdit::CNumEdit()
  11. {
  12. }

  13. CNumEdit::~CNumEdit()
  14. {
  15. }

  16. BEGIN_MESSAGE_MAP(CNumEdit, CEdit)
  17.         //{{AFX_MSG_MAP(CNumEdit)
  18.         ON_WM_CHAR()
  19.         //}}AFX_MSG_MAP
  20. END_MESSAGE_MAP()

  21. /////////////////////////////////////////////////////////////////////////////
  22. // CNumEdit message handlers

  23. void CNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
  24. {
  25.         // TODO: Add your message handler code here and/or call default
  26.         if (nChar == 8)
  27.                 CEdit::OnChar(nChar, nRepCnt, nFlags);

  28.         POINT caret;
  29.         ::GetCaretPos (&caret);
  30.         caret.x = LOWORD (CharFromPos (caret));

  31.         CString text;
  32.         GetWindowText (text);

  33.         if (isdigit(nChar))
  34.                 CEdit::OnChar(nChar, nRepCnt, nFlags);
  35.         else if (nChar == '-')
  36.         {
  37.                 if (!caret.x)
  38.                 {
  39.                         if (((text.GetLength() > 0) && (text[0]!='-')) || (text.GetLength()==0))
  40.                                 CEdit::OnChar(nChar, nRepCnt, nFlags);
  41.                 }
  42.                 else
  43.                 {
  44.                         if ((text [caret.x-1] == 'e') || (text [caret.x-1] == 'E'))
  45.                                 CEdit::OnChar(nChar, nRepCnt, nFlags);
  46.                 }
  47.         }

  48.         else if ((nChar == 'e') || (nChar == 'E'))
  49.         {
  50.                 if ((caret.x == 1) && (text[0] == '-'))
  51.                         return ;

  52.                 if (caret.x)
  53.                 {
  54.                         for (int i=0; i<text.GetLength(); i++)
  55.                         {
  56.                                 if ((text[i] == 'e') ||(text[i] == 'E'))
  57.                                         return ;
  58.                         }
  59.                         CEdit::OnChar(nChar, nRepCnt, nFlags);
  60.                 }
  61.         }

  62.         else if (nChar == '.')
  63.         {
  64.                 for (int i=0; i<text.GetLength(); i++)
  65.                 {
  66.                         if (text[i] == '.')
  67.                                 return ;
  68.                 }

  69.                 for (i=0; i<text.GetLength(); i++)
  70.                 {
  71.                         if (((text[i] == 'e') ||(text[i]=='E')) && (caret.x > i))
  72.                                 return ;
  73.                 }

  74.                 CEdit::OnChar(nChar, nRepCnt, nFlags);
  75.         }
  76. }


  77. void CNumEdit::SetValue(double val)
  78. {
  79.         CString tmp;
  80.         tmp.Format ("%G",val);
  81.         SetWindowText (tmp);
  82. }

  83. double CNumEdit::GetValue()
  84. {
  85.         CString tmp;
  86.         GetWindowText (tmp);
  87.         return strtod (tmp,NULL);
  88. }
复制代码



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索