📄 editfloat.cpp
字号:
// 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -