VC-editing digital text box cnumberedit (code)

xiaoxiao2021-03-06  45

Numberedit.h

#ifndef __numberedit_h__

#define __numberedit_h__

Class CNumberedit: Public Cedit

{

PUBLIC:

CNUMBEREDIT ();

Virtual ~ cnumberedit ();

Void setAfterdotlen (uint iafterdotlen) {m_iafterdotlen = iafterdotlen;

Uint getAfterDotlen () {return m_iafterdotlen;

protected:

Bool CHECKNUMBER (uint nchar, uint nrepcnt, uint nflags);

// Bool CHECKONEPLUS (uint nchar, uint nrepcnt, uint nflags);

Bool CheckOnEminus (uint nchar, uint nrepcnt, uint nflags);

Bool Checkonedot (uint nchar, uint nrepcnt, uint nflags);

Int getcaretxpos ();

CSTRING M_STR;

Uint m_iafterdotlen;

protected:

// {{AFX_MSG (CUNTCNUMBEREDIT)

AFX_MSG Void Onchar (uint nchar, uint nrepcnt, uint nflags);

AFX_MSG void onkillfocus ();

//}} AFX_MSG

Declare_message_map ()

}

#ENDIF

Numberedit.cpp

#include "stdafx.h"

#include "numberedit.h"

Cnumberedit :: cnumbedit ()

{

m_iafterdotlen = 2;

m_str = _t ("0.00");

}

Cnumberedit :: ~ cnumberedit ()

{

}

Begin_Message_Map (CNUMBEREDIT, CEDIT)

// {{AFX_MSG_MAP (cnumberedit)

ON_WM_CHAR ()

ON_CONTROL_REFLECT (En_killfocus, ONKILLFOCUS)

//}} AFX_MSG_MAP

END_MESSAGE_MAP ()

Void cnumberedit :: 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);

Return;

}

Bool bchange = false;

GetWindowText (M_STR);

IF (Checknumber (nchar, nrepcnt, nflags)

{

Bchange = true;

}

// Else IF (CheckonePlus (nchar, nrepcnt, nflags))

// {

//; // do nothing

//}

Else IF (CheckOnEminus (nchar, nrepcnt, nflags)

{

Bchange = true;

}

Else IF (Checkonedot (nchar, nrepcnt, nflags)

{

Bchange = true;

}

IF (bchange)

{

CEDIT :: OnChar (nchar, nrepcnt, nflags);

//Setformattext();/m_point.x = m_point.y * 6;

// setCareTPOS (m_point);

}

}

Void Cuntcnumberedit :: ONKILLFOCUS () {getWindowText (m_str);

INT iLOP = m_iafterdotlen; if (m_str.isempty ()) {m_str = "0."} else if (m_str.getlength () == 1 && m_str [0] == TCHAR ('-')) {m_str = "0."} else {int idotpos = m_str.find (tchar ('.')); If (idotpos == 0) m_str = "0" m_STR; ELSE IF (iDotpos <0) m_str = "." ;

Idotpos = m_Str.Find (TCHAR ('.')); INT Ilen = m_Str.getLength () - 1 - Idotpos; iLoop = (int) m_iafterdotlen - ilen;} if (iLOOP> = 0) {for (int i = 0; I

SetWindowText (m_str);

Bool cnumberedit :: Checknumber (uint nchar, uint nrepcnt, uint nflags)

{

IF (:: isdigit (nchar) == 0)

Return False;

Int idotpos = m_str.find (tchar ('.'));

IF (idotpos> = 0)

{

INT Ilen = m_str.getlength () - 1 - iDOTPOS;

IF ((getCaretXPOS ()> = idotpos) && (ilen> = (int) m_iafterdotlen))

{

Return False;

}

}

Return True;

}

Bool CNumberedit :: CheckOnEminus (uint nchar, uint nrepcnt, uint nflags)

{

IF (nchar! = '-')

Return False;

IF (getcaretxpos ()! = 0)

Return False;

IF (! m_str.isempty () && m_str.getat (0) == TCHAR ('-')))))

Return False;

Return True;

}

Bool cnumberedit :: CheckONEDOT (uint nchar, uint nrepcnt, uint nflags)

{

IF (nchar! = '.')

Return False;

IF (m_str.find (tchar ('.'))> = 0)

Return False;

INT ipos = getcaretxpos ();

IF (ipos == 0)

Return False; Else IF (ipos == 1 && m_str [0] == TCHAR ('-'))

Return False;

Return True;

}

INT CNUMBEREDIT :: getcaretxpos ()

{

Cpoint P = getCaretPos ();

Return (p.x - p.y) / 6;

}

转载请注明原文地址:https://www.9cbs.com/read-74771.html

New Post(0)