?? editst.cpp
字號(hào):
// 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
///設(shè)成字符串輸入格式
/**
* MaxLength : 字符串允許輸入的最大長(zhǎng)度 \n
*/
void CEditST::SetStrFormat(unsigned int MaxLength)
{
m_InputFlag = INPUT_STR;
m_strMaxLength = MaxLength;
SetLimitText(m_strMaxLength);
m_strInput.Empty();
}
///設(shè)成整數(shù)輸入格式,默認(rèn)最小值0,最大值FFFFFF
/**
* MinInt : 允許輸入的最小整數(shù),默認(rèn)0 \n
* MaxInt : 允許輸入的最大整數(shù),默認(rèn)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();
}
///設(shè)成BCD輸入格式
/**
* BcdLength : 待輸入的BCD串的字節(jié)數(shù) \n
*/
void CEditST::SetBcdFormat(unsigned int BcdLength)
{
m_InputFlag = INPUT_BCD;
m_bcdLength = BcdLength;
SetLimitText(BcdLength * 2);
m_strInput.Empty();
}
///設(shè)成十六進(jìn)制數(shù)輸入格式
/**
* HexLength : 待輸入的HEX串的字節(jié)數(shù),0表示長(zhǎng)度任意 \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();
}
///設(shè)成金額輸入格式
void CEditST::SetAmountFormat()
{
m_InputFlag = INPUT_AMOUNT;
SetLimitText(11);
m_strInput.Empty();
}
///設(shè)成總參數(shù)量輸入格式
void CEditST::SetFltNumFormat()
{
m_InputFlag = INPUT_FLTNUM;
SetLimitText(10);
m_strInput.Empty();
}
///設(shè)成日期輸入格式
void CEditST::SetDateFormat()
{
m_InputFlag = INPUT_DATE;
memset(m_dateMin, 0, 4);
memset(m_dateMax, 0xFF, 4);
SetLimitText(8);
m_strInput.Empty();
}
///設(shè)置輸入日期的最小值
/**
* MinDate : 最小日期,BCD \n
*/
void CEditST::SetMinDate(const unsigned char *MinDate)
{
if(MinDate==NULL){
memset(m_dateMin, 0, 4);
}
else{
memcpy(m_dateMin, MinDate, 4);
}
}
///設(shè)置輸入日期的最大值
/**
* MaxDate : 最大日期,BCD \n
*/
void CEditST::SetMaxDate(const unsigned char *MaxDate)
{
if(MaxDate==NULL){
memset(m_dateMax, 0xFF, 4);
}
else{
memcpy(m_dateMax, MaxDate, 4);
}
}
///設(shè)成時(shí)間輸入格式
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());
///獲取字符串的輸入結(jié)果
/**
* 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;
}
///獲取整數(shù)的輸入結(jié)果
/**
* Result : 返回輸入的整數(shù) \n
* 返回 : SUCC/FAIL
*/
int CEditST::GetIntResult(unsigned int &Result)
{
if(m_InputFlag!=INPUT_INT){
return FAIL;
}
GetData();
if(CheckIntInput(buf, m_intResult)!=SUCC){
ShowMsg("輸入整數(shù)格式錯(cuò)誤.");
return FAIL;
}
if(m_intResult>m_intMaxInt || m_intResult<m_intMinInt){
ShowMsg("輸入整數(shù)格式錯(cuò)誤.");
return FAIL;
}
Result = m_intResult;
return SUCC;
}
///獲取BCD的輸入結(jié)果
/**
* BcdBuf : 返回輸入的BCD串 \n
* BcdLength : 返回輸入的BCD串的長(zhǎng)度 \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格式錯(cuò)誤.");
return FAIL;
}
BcdLength = m_bcdLength;
memcpy(BcdBuf, m_bcdResult, BcdLength);
return SUCC;
}
///獲取十進(jìn)制的輸入結(jié)果
/**
* HexBuf : 返回十六進(jìn)制串 \n
* HexLength : 返回十六進(jìn)制串的長(zhǎng)度 \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("輸入十六進(jìn)制數(shù)格式錯(cuò)誤.");
return FAIL;
}
}
else if(strlen(buf)%2 || CheckHexInput(buf, strlen(buf)/2, m_hexResult)!=SUCC){
ShowMsg("輸入十六進(jìn)制數(shù)格式錯(cuò)誤.");
return FAIL;
}
HexLength = strlen(buf)/2;
memcpy(HexBuf, m_hexResult, HexLength);
return SUCC;
}
///獲取金額輸入結(jié)果,以分為單位
/**
* Amount : 返回輸入的金額,分為單位 \n
* 返回 : SUCC/FAIL
*/
int CEditST::GetAmountResult(unsigned int &Amount)
{
if(m_InputFlag!=INPUT_AMOUNT){
return FAIL;
}
GetData();
if(CheckAmountInput(buf, Amount)!=SUCC){
ShowMsg("輸入金額格式錯(cuò)誤.");
return FAIL;
}
return SUCC;
}
///獲取總參數(shù)量輸入結(jié)果
/**
* NumWithoutDot : 返回輸入的去掉小數(shù)的點(diǎn)后整數(shù)值 \n
* FloatPartOfLength : 返回小數(shù)部分的長(zhǎng)度 \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("輸入數(shù)量格式錯(cuò)誤.");
return FAIL;
}
return SUCC;
}
///獲取日期輸入結(jié)果
/**
* 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("輸入日期格式錯(cuò)誤.");
return FAIL;
}
Str2Bcd(buf, m_dateResult, 8);
if(CmpBcdDate(m_dateResult, m_dateMin)<0 ||
CmpBcdDate(m_dateResult, m_dateMax)>0){
ShowMsg("輸入日期格式錯(cuò)誤.");
return FAIL;
}
memcpy(DateBuf, m_dateResult, 4);
return SUCC;
}
///獲取日期輸入的結(jié)果
/**
* 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("輸入日期格式錯(cuò)誤.");
return FAIL;
}
Str2Bcd(buf, m_dateResult, 8);
if(CmpBcdDate(m_dateResult, m_dateMin)<0 ||
CmpBcdDate(m_dateResult, m_dateMax)>0){
ShowMsg("輸入日期格式錯(cuò)誤.");
return FAIL;
}
bcd2greg(m_dateResult, (int&)Year, (int&)Month, (int&)Day);
return SUCC;
}
///獲取時(shí)間輸入結(jié)果
/**
* Hour : 返回輸入的小時(shí) \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("輸入時(shí)間格式錯(cuò)誤.");
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("輸入時(shí)間格式錯(cuò)誤.");
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);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -