📄 editst.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 + -