editfloat.cpp

来自「3D reconstruction, medical image process」· C++ 代码 · 共 205 行

CPP
205
字号
// EditFloat.cpp : implementation file//#include "stdafx.h"#include "fusion.h"#include "EditFloat.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// RxEditFloatRxEditFloat::RxEditFloat(){	m_nDecimalPoint	= 2;	m_fRangeMin		= 0.0f;	m_fRangeMax		= 1.0f;}RxEditFloat::~RxEditFloat(){}BEGIN_MESSAGE_MAP(RxEditFloat, CEdit)	//{{AFX_MSG_MAP(RxEditFloat)	ON_WM_CHAR()	ON_WM_MOUSEWHEEL()	ON_WM_KILLFOCUS()	//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// RxEditFloat message handlersBOOL RxEditFloat::PreTranslateMessage(MSG* pMsg) {	if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)	{		ValidateEdit();		SendMessageToOwner();		return TRUE;	}		return CEdit::PreTranslateMessage(pMsg);}void RxEditFloat::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {	CString		strHolder;	strHolder = _T("0123456789-.\b");	if(strHolder.Find(nChar) < 0)		return;		CEdit::OnChar(nChar, nRepCnt, nFlags);}BOOL RxEditFloat::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) {	if(zDelta >= 0)		IncreaseEdit();	else		DecreaseEdit();	return CEdit::OnMouseWheel(nFlags, zDelta, pt);}void RxEditFloat::OnKillFocus(CWnd* pNewWnd) {	CEdit::OnKillFocus(pNewWnd);		ValidateEdit();	SendMessageToOwner();	}/////////////////////////////////////////////////////////////////////////////void RxEditFloat::SendMessageToOwner(){	NMED_FLOAT		nmed;	nmed.hdr.hwndFrom	= m_hWnd;	nmed.hdr.idFrom		= GetDlgCtrlID();	nmed.hdr.code		= EN_CHANGED_FLOAT;	nmed.fEdit			= GetEdit();    CWnd* pOwner = GetOwner();    if (pOwner)        pOwner->SendMessage(WM_NOTIFY, nmed.hdr.idFrom, (LPARAM)&nmed);}void RxEditFloat::ValidateEdit(){	float		fValue = GetEdit();	if(fValue < m_fRangeMin)	fValue = m_fRangeMin;	if(fValue > m_fRangeMax)	fValue = m_fRangeMax;	CString		strWindow, strFormat;	strFormat.Format(_T("%d"), m_nDecimalPoint);	strFormat = _T("%.") + strFormat + _T("f"); 	strWindow.Format(strFormat, fValue);	SetWindowText(strWindow);	UpdateWindow();}#include <math.h>void RxEditFloat::IncreaseEdit(int nValue){	float	fStep = (float)nValue / (float)pow(10, m_nDecimalPoint);	float	fOldValue, fNewValue;	fOldValue = GetEdit();	SetEdit(fOldValue + fStep);	fNewValue = GetEdit();	if(fOldValue != fNewValue)		SendMessageToOwner();}void RxEditFloat::DecreaseEdit(int nValue){	float	fStep = (float)nValue / (float)pow(10, m_nDecimalPoint);	float	fOldValue, fNewValue;	fOldValue = GetEdit();	SetEdit(fOldValue - fStep);	fNewValue = GetEdit();	if(fOldValue != fNewValue)		SendMessageToOwner();}/////////////////////////////////////////////////////////////////////////////void RxEditFloat::SetDecimalPoint(UINT nDecimalPoint){	m_nDecimalPoint = nDecimalPoint;}UINT RxEditFloat::GetDecimalPoint(){	return m_nDecimalPoint;}void RxEditFloat::SetRange(float fRangeMin, float fRangeMax, UINT nMask){	float	fValue = GetEdit();	if(nMask & EMASK_MIN)	{		m_fRangeMin = fRangeMin;		if(fValue < fRangeMin)		SetEdit(fRangeMin);	}	if(nMask & EMASK_MAX)	{		m_fRangeMax = fRangeMax;		if(fValue > fRangeMax)		SetEdit(fRangeMax);	}}void RxEditFloat::GetRange(float &fRangeMin, float &fRangeMax){	fRangeMin = m_fRangeMin;	fRangeMax = m_fRangeMax;}void RxEditFloat::SetEdit(float fValue){	float	fOldValue = GetEdit();	if(fOldValue == fValue)		return;	if(fValue < m_fRangeMin)	fValue = m_fRangeMin;	if(fValue > m_fRangeMax)	fValue = m_fRangeMax;	CString		strWindow, strFormat;	strFormat.Format(_T("%d"), m_nDecimalPoint);	strFormat = _T("%.") + strFormat + _T("f"); 	strWindow.Format(strFormat, fValue);	SetWindowText(strWindow);	UpdateWindow();}float RxEditFloat::GetEdit(){	USES_CONVERSION;	float		fReturn;	CString		strWindow;	GetWindowText(strWindow);	if(strWindow.IsEmpty())		fReturn = -1.0f;	else		fReturn = (float)atof(T2A(strWindow));	return fReturn;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?