⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editst.cpp

📁 视频芯片管理系统
💻 CPP
字号:
// editst.cpp : implementation file
//

#include "stdafx.h"
#include "EditST.h"
#include "..\\DogMgt_Core\\DogMgt_Base.h"
#include "..\\DogMgt_Core\\GlobalFunc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CEditST

CEditST::CEditST()
{
	m_InputFlag = INPUT_STR;
	m_strMaxLength = 40;
}

CEditST::~CEditST()
{
}


BEGIN_MESSAGE_MAP(CEditST, CEdit)
	//{{AFX_MSG_MAP(CEditST)
	ON_WM_CHAR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEditST message handlers

///设成字符串输入格式
/**
  * MaxLength : 字符串允许输入的最大长度 \n
  */
void CEditST::SetStrFormat(unsigned int MaxLength)
{
	m_InputFlag = INPUT_STR;
	m_strMaxLength = MaxLength;
	SetLimitText(m_strMaxLength);
	m_strInput.Empty();
}

///设成整数输入格式,默认最小值0,最大值FFFFFF
/**
  * MinInt : 允许输入的最小整数,默认0 \n
  * MaxInt : 允许输入的最大整数,默认0xFFFFFFFF \n
  */
void CEditST::SetIntFormat(unsigned int MinInt, unsigned int MaxInt)
{
	m_InputFlag = INPUT_INT;
	m_intMinInt = MinInt;
	m_intMaxInt = MaxInt;

	int length = 0;
	while(MaxInt){
		MaxInt /= 10;
		length ++;
	}
	SetLimitText(length);
	m_strInput.Empty();
}

///设成BCD输入格式
/**
  * BcdLength : 待输入的BCD串的字节数 \n
  */
void CEditST::SetBcdFormat(unsigned int BcdLength)
{
	m_InputFlag = INPUT_BCD;
	m_bcdLength = BcdLength;
	SetLimitText(BcdLength * 2);
	m_strInput.Empty();
}

///设成十六进制数输入格式
/**
  * HexLength : 待输入的HEX串的字节数,0表示长度任意 \n
  */
void CEditST::SetHexFormat(unsigned int HexLength)
{
	m_InputFlag = INPUT_HEX;
	m_hexLength = HexLength;
	if(HexLength>0){
		SetLimitText(HexLength * 2);
	}
	this->ModifyStyle(0, ES_UPPERCASE);
	m_strInput.Empty();
}

///设成金额输入格式
void CEditST::SetAmountFormat()
{
	m_InputFlag = INPUT_AMOUNT;
	SetLimitText(11);
	m_strInput.Empty();
}

///设成总参数量输入格式
void CEditST::SetFltNumFormat()
{
	m_InputFlag = INPUT_FLTNUM;
	SetLimitText(10);
	m_strInput.Empty();
}

///设成日期输入格式
void CEditST::SetDateFormat()
{
	m_InputFlag = INPUT_DATE;
	memset(m_dateMin, 0, 4);
	memset(m_dateMax, 0xFF, 4);
	SetLimitText(8);
	m_strInput.Empty();
}

///设置输入日期的最小值
/**
  * MinDate : 最小日期,BCD \n
  */
void CEditST::SetMinDate(const unsigned char *MinDate)
{
	if(MinDate==NULL){
		memset(m_dateMin, 0, 4);
	}
	else{
		memcpy(m_dateMin, MinDate, 4);
	}
}

///设置输入日期的最大值
/**
  * MaxDate : 最大日期,BCD \n
  */
void CEditST::SetMaxDate(const unsigned char *MaxDate)
{
	if(MaxDate==NULL){
		memset(m_dateMax, 0xFF, 4);
	}
	else{
		memcpy(m_dateMax, MaxDate, 4);
	}
}

///设成时间输入格式
void CEditST::SetTimeFormat()
{
	m_InputFlag = INPUT_TIME;
	SetLimitText(8);
	m_strInput.Empty();
}

///从文本框中得到字符串
#define GetData() \
	char buf[500];	\
	UpdateData();	\
	memset(buf, 0, sizeof(buf));	\
	GetWindowText(m_strInput);	\
	memcpy(buf, m_strInput.GetBuffer(m_strInput.GetLength()), m_strInput.GetLength());

///获取字符串的输入结果
/**
  * StrBuf : 返回输入的字符串 \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetStrResult(char *StrBuf)
{
	if(m_InputFlag!=INPUT_STR){
		return FAIL;
	}

	GetData();

	memset(StrBuf, 0, m_strMaxLength + 1);
	memcpy(StrBuf, buf, strlen(buf));

	return SUCC;
}

///获取整数的输入结果
/**
  * Result : 返回输入的整数 \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetIntResult(unsigned int &Result)
{
	if(m_InputFlag!=INPUT_INT){
		return FAIL;
	}

	GetData();

	if(CheckIntInput(buf, m_intResult)!=SUCC){
		ShowMsg("输入整数格式错误.");
		return FAIL;
	}
	if(m_intResult>m_intMaxInt || m_intResult<m_intMinInt){
		ShowMsg("输入整数格式错误.");
		return FAIL;
	}

	Result = m_intResult;
	return SUCC;
}

///获取BCD的输入结果
/**
  * BcdBuf : 返回输入的BCD串 \n
  * BcdLength : 返回输入的BCD串的长度 \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetBcdResult(unsigned char *BcdBuf, unsigned int &BcdLength)
{
	if(m_InputFlag!=INPUT_BCD){
		return FAIL;
	}

	GetData();

	if(CheckBcdInput(buf, m_bcdLength, m_bcdResult)!=SUCC){
		ShowMsg("输入BCD格式错误.");
		return FAIL;
	}

	BcdLength = m_bcdLength;
	memcpy(BcdBuf, m_bcdResult, BcdLength);
	return SUCC;
}

///获取十进制的输入结果
/**
  * HexBuf : 返回十六进制串 \n
  * HexLength : 返回十六进制串的长度 \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetHexResult(unsigned char *HexBuf, unsigned int &HexLength)
{
	if(m_InputFlag!=INPUT_HEX){
		return FAIL;
	}

	GetData();

	if(m_hexLength>0){
		if(CheckHexInput(buf, m_hexLength, m_hexResult)!=SUCC){
			ShowMsg("输入十六进制数格式错误.");
			return FAIL;
		}
	}
	else if(strlen(buf)%2 || CheckHexInput(buf, strlen(buf)/2, m_hexResult)!=SUCC){
		ShowMsg("输入十六进制数格式错误.");
		return FAIL;
	}

	HexLength = strlen(buf)/2;
	memcpy(HexBuf, m_hexResult, HexLength);
	return SUCC;
}

///获取金额输入结果,以分为单位
/**
  * Amount : 返回输入的金额,分为单位 \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetAmountResult(unsigned int &Amount)
{
	if(m_InputFlag!=INPUT_AMOUNT){
		return FAIL;
	}

	GetData();

	if(CheckAmountInput(buf, Amount)!=SUCC){
		ShowMsg("输入金额格式错误.");
		return FAIL;
	}

	return SUCC;
}

///获取总参数量输入结果
/**
  * NumWithoutDot : 返回输入的去掉小数的点后整数值 \n
  * FloatPartOfLength : 返回小数部分的长度 \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetFltNumResult(unsigned int &NumWithoutDot, unsigned char &FloatPartOfLength)
{
	if(m_InputFlag!=INPUT_FLTNUM){
		return FAIL;
	}

	GetData();

	if(CheckFltNumInput(buf, NumWithoutDot, FloatPartOfLength)!=SUCC){
		ShowMsg("输入数量格式错误.");
		return FAIL;
	}

	return SUCC;
}

///获取日期输入结果
/**
  * DateBuf : 返回输入的日期,BCD \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetDateResult(unsigned char *DateBuf)
{
	if(m_InputFlag!=INPUT_DATE){
		return FAIL;
	}

	GetData();

	if(CheckStrDateFormat((unsigned char*)buf)!=SUCC){
		ShowMsg("输入日期格式错误.");
		return FAIL;
	}
	Str2Bcd(buf, m_dateResult, 8);
	if(CmpBcdDate(m_dateResult, m_dateMin)<0 ||
		CmpBcdDate(m_dateResult, m_dateMax)>0){
		ShowMsg("输入日期格式错误.");
		return FAIL;
	}

	memcpy(DateBuf, m_dateResult, 4);
	return SUCC;
}

///获取日期输入的结果
/**
  * Year : 返回输入的年 \n
  * Month : 返回输入的月 \n
  * Day : 返回输入的日 \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetDateResult(unsigned int &Year, unsigned char &Month, unsigned char &Day)
{
	if(m_InputFlag!=INPUT_DATE){
		return FAIL;
	}

	GetData();

	if(CheckStrDateFormat((unsigned char*)buf)!=SUCC){
		ShowMsg("输入日期格式错误.");
		return FAIL;
	}
	Str2Bcd(buf, m_dateResult, 8);
	if(CmpBcdDate(m_dateResult, m_dateMin)<0 ||
		CmpBcdDate(m_dateResult, m_dateMax)>0){
		ShowMsg("输入日期格式错误.");
		return FAIL;
	}
	bcd2greg(m_dateResult, (int&)Year, (int&)Month, (int&)Day);

	return SUCC;
}

///获取时间输入结果
/**
  * Hour : 返回输入的小时 \n
  * Minute : 返回输入的分钟 \n
  * Second : 返回输入的秒 \n
  * 返回 : SUCC/FAIL
  */
int CEditST::GetTimeResult(unsigned char &Hour, unsigned char &Minute, unsigned char &Second)
{
	if(m_InputFlag!=INPUT_TIME){
		return FAIL;
	}

	GetData();

	if(!(isdigit(buf[0]) &&
		 isdigit(buf[1]) &&
		 buf[2]==':' &&
		 isdigit(buf[3]) &&
		 isdigit(buf[4]) &&
		 buf[5]==':' &&
		 isdigit(buf[6]) &&
		 isdigit(buf[7])) ){
		ShowMsg("输入时间格式错误.");
		return FAIL;
	}

	Hour = (buf[0]-'0') * 10 + (buf[1]-'0');
	Minute = (buf[3]-'0') * 10 + (buf[4]-'0');
	Second = (buf[6]-'0') * 10 + (buf[7]-'0');
	if(Hour>23 || Minute>59 || Second>59){
		ShowMsg("输入时间格式错误.");
		return FAIL;
	}

	return SUCC;
}

///检查输入的是否合法,不合法不允许输入
void CEditST::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default

	int start, end;
	GetSel(start, end);
	switch(m_InputFlag){
		case INPUT_STR:
			break;

		case INPUT_INT:
		case INPUT_DATE:
		case INPUT_BCD:
		{
			if(nChar>=0x20 && nChar<128){
				if(nChar<'0' || nChar>'9'){
					return;
				}
			}
			break;
		}
		case INPUT_AMOUNT:
		{
			unsigned int Amount;
			char buf1[100];
			if(nChar>=0x20 && nChar<=0x7F){
				if( (nChar>='0' && nChar<='9') || nChar=='.'){
					GetData();
					memset(buf1, 0, 20);
					memcpy(buf1, buf, start);
					buf1[start] = nChar;
					memcpy(buf1 + start + 1, buf+end, strlen(buf)-end);
					if(CheckAmountInput(buf1, Amount)!=SUCC){
						return;
					}
				}
				else{
					return;
				}
			}
			break;
		}
		case INPUT_FLTNUM:
		{
			unsigned int NumWithoutDot;
			unsigned char FloatPartLength;
			char buf1[100];
			if(nChar>=0x20 && nChar<=0x7F){
				if( (nChar>='0' && nChar<='9') || nChar=='.'){
					GetData();
					memset(buf1, 0, 20);
					memcpy(buf1, buf, start);
					buf1[start] = nChar;
					memcpy(buf1 + start + 1, buf+end, strlen(buf)-end);
					if(CheckFltNumInput(buf1, NumWithoutDot, FloatPartLength)!=SUCC){
						return;
					}
				}
				else{
					return;
				}
			}
			break;
		}
		case INPUT_TIME:
		{
			if(nChar>=0x20 && nChar<128){
				if(!( (nChar>='0' && nChar<='9') || (nChar==':') )){
					return;
				}
			}
			break;
		}
		case INPUT_HEX:
		{
			if(nChar>=0x20 && nChar<128){
				if(!( (nChar>='0' && nChar<='9') ||
					  (nChar>='a' && nChar<='f') ||
					  (nChar>='A' && nChar<='F') )){
					return;
				}
			}
			break;
		}
	}
	
	CEdit::OnChar(nChar, nRepCnt, nFlags);
}

⌨️ 快捷键说明

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