工控编程吧
标题:
上位机MFC指数编辑框实例
[打印本页]
作者:
qq263946146
时间:
2019-7-8 23:55
标题:
上位机MFC指数编辑框实例
效果演示
(, 下载次数: 0)
上传
点击文件名下载附件
例程从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);
}
这样例程就可以编译执行,查看效果了。
集成类的两文件可以在下面复制使用,或下载例程学习:
(, 下载次数: 0)
上传
点击文件名下载附件
#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);
}
复制代码
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4