效果演示
上位机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);
}
这样例程就可以编译执行,查看效果了。
集成类的两文件可以在下面复制使用,或下载例程学习:
- #if !defined(AFX_NUMEDIT_H__ACD85206_F566_11D1_A2DA_00609761A58B__INCLUDED_)
- #define AFX_NUMEDIT_H__ACD85206_F566_11D1_A2DA_00609761A58B__INCLUDED_
- #if _MSC_VER >= 1000
- #pragma once
- #endif // _MSC_VER >= 1000
- // NumEdit.h : header file
- //
- /////////////////////////////////////////////////////////////////////////////
- // CNumEdit window
- class CNumEdit : public CEdit
- {
- // Construction
- public:
- CNumEdit();
- // Attributes
- public:
- // Operations
- public:
- // Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CNumEdit)
- //}}AFX_VIRTUAL
- // Implementation
- public:
- double GetValue();
- void SetValue (double val);
- virtual ~CNumEdit();
- // Generated message map functions
- protected:
- //{{AFX_MSG(CNumEdit)
- afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////////
- //{{AFX_INSERT_LOCATION}}
- // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
- #endif // !defined(AFX_NUMEDIT_H__ACD85206_F566_11D1_A2DA_00609761A58B__INCLUDED_)
复制代码- #include "stdafx.h"
- #include "NumEdit.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CNumEdit
- CNumEdit::CNumEdit()
- {
- }
- CNumEdit::~CNumEdit()
- {
- }
- BEGIN_MESSAGE_MAP(CNumEdit, CEdit)
- //{{AFX_MSG_MAP(CNumEdit)
- ON_WM_CHAR()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CNumEdit message handlers
- void CNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
- {
- // TODO: Add your message handler code here and/or call default
- if (nChar == 8)
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- POINT caret;
- ::GetCaretPos (&caret);
- caret.x = LOWORD (CharFromPos (caret));
- CString text;
- GetWindowText (text);
- if (isdigit(nChar))
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- else if (nChar == '-')
- {
- if (!caret.x)
- {
- if (((text.GetLength() > 0) && (text[0]!='-')) || (text.GetLength()==0))
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- }
- else
- {
- if ((text [caret.x-1] == 'e') || (text [caret.x-1] == 'E'))
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- }
- }
- else if ((nChar == 'e') || (nChar == 'E'))
- {
- if ((caret.x == 1) && (text[0] == '-'))
- return ;
- if (caret.x)
- {
- for (int i=0; i<text.GetLength(); i++)
- {
- if ((text[i] == 'e') ||(text[i] == 'E'))
- return ;
- }
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- }
- }
- else if (nChar == '.')
- {
- for (int i=0; i<text.GetLength(); i++)
- {
- if (text[i] == '.')
- return ;
- }
- for (i=0; i<text.GetLength(); i++)
- {
- if (((text[i] == 'e') ||(text[i]=='E')) && (caret.x > i))
- return ;
- }
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- }
- }
- void CNumEdit::SetValue(double val)
- {
- CString tmp;
- tmp.Format ("%G",val);
- SetWindowText (tmp);
- }
- double CNumEdit::GetValue()
- {
- CString tmp;
- GetWindowText (tmp);
- return strtod (tmp,NULL);
- }
复制代码
|