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

📄 dlglineinput.cpp

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

#include "stdafx.h"
#include "..\DogMgt.h"
#include "DlgLineInput.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

/////////////////////////////////////////////////////////////////////////////
// CDlgLineInput dialog


CDlgLineInput::CDlgLineInput(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgLineInput::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgLineInput)
	m_strInput = _T("");
	m_strPrompt = _T("");
	//}}AFX_DATA_INIT
	m_InputFlag = INPUT_STR;
	m_strMaxLength = 40;
}


void CDlgLineInput::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgLineInput)
	DDX_Control(pDX, IDCANCEL, m_btnCancel);
	DDX_Control(pDX, IDOK, m_btnOK);
	DDX_Control(pDX, IDC_EDIT_INPUT, m_ctrlInput);
	DDX_Text(pDX, IDC_EDIT_INPUT, m_strInput);
	DDX_Text(pDX, IDC_STATIC_PROMPT, m_strPrompt);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDlgLineInput, CDialog)
	//{{AFX_MSG_MAP(CDlgLineInput)
	ON_WM_SHOWWINDOW()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgLineInput message handlers

///设置对话框标题
/**
  * pTitle : 对话框标题 \n
  */
void CDlgLineInput::SetTitle(const char *pTitle)
{
	m_strTitle = pTitle;
}

///设置输入提示
/**
  * pPrompt : 输入提示信息 \n
  */
void CDlgLineInput::SetPrompt(const char *pPrompt)
{
	m_strPrompt = pPrompt;
}

///设置金额输入格式
void CDlgLineInput::SetAmountFormat()
{
	m_InputFlag = INPUT_AMOUNT;
}

///设置BCD输入格式
/**
  * BcdLength : 待输入的BCD串的长度 \n
  */
void CDlgLineInput::SetBcdFormat(unsigned int BcdLength)
{
	m_InputFlag = INPUT_BCD;
	m_bcdLength = BcdLength;
}

///设置总参数量输入格式
void CDlgLineInput::SetFltNumFormat()
{
	m_InputFlag = INPUT_FLTNUM;
}

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

///设置时间输入格式
void CDlgLineInput::SetTimeFormat()
{
	m_InputFlag = INPUT_TIME;
}

///设置日期输入格式
void CDlgLineInput::SetDateFormat()
{
	m_InputFlag = INPUT_DATE;
	memset(m_dateMin, 0, 4);
	memset(m_dateMax, 0xFF, 4);
}

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

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

///输入十六进制输入格式
/**
  * HexLength : 待输入的HEX串的长度 \n
  */
void CDlgLineInput::SetHexFormat(unsigned int HexLength)
{
	m_InputFlag = INPUT_HEX;
	m_hexLength = HexLength;
}

///设置整数输入格式
/**
  * MinInt : 待输入整数的最小值 \n
  * MaxInt : 待输入整数的最大值 \n
  */
void CDlgLineInput::SetIntFormat(unsigned int MinInt, unsigned int MaxInt)
{
	m_InputFlag = INPUT_INT;
	m_intMinInt = MinInt;
	m_intMaxInt = MaxInt;
}

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

	memset(StrBuf, 0, m_strMaxLength+1);
	memcpy(StrBuf, m_strInput.GetBuffer(m_strInput.GetLength()), m_strInput.GetLength());

	return SUCC;
}

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

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

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

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

	HexLength = m_hexLength;
	memcpy(HexBuf, m_hexResult, HexLength);
	return SUCC;
}

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

	Amount = m_amountResult;
	return SUCC;
}

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

	NumWithoutDot = m_numWithoutDot;
	FloatPartOfLength = m_floatPartLength;
	return SUCC;
}

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

	Year = m_Year;
	Month = m_Month;
	Day = m_Day;
	return SUCC;
}

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

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

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

	Hour = m_Hour;
	Minute = m_Minute;
	Second = m_Second;
	return SUCC;
}

///初始化对话框
BOOL CDlgLineInput::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_btnOK.SetIcon(IDI_OK);
	m_btnCancel.SetIcon(IDI_CANCEL);

	char buf[100], buf1[100], buf2[100];
//	unsigned int MaxInt;
//	int length;
	
	SetWindowText(m_strTitle);
	switch(m_InputFlag){
		case INPUT_BCD:
			sprintf(buf, "%s%d%s", "(", m_bcdLength, "字节)");
			m_strPrompt += buf;
			break;
		case INPUT_HEX:
			sprintf(buf, "%s%d%s", "(", m_hexLength, "字节)");
			m_strPrompt += buf;
			break;
		case INPUT_INT:
			if(m_intMinInt>0){//最小值大于0
				if(m_intMaxInt<0xFFFFFFFF){//最大值未到最大值
					sprintf(buf, "%s%d%s%d%s", "(范围:", m_intMinInt, "--", m_intMaxInt, ")");
					m_strPrompt += buf;
				}
				else{
					sprintf(buf, "%s%d%s", "(范围:>=", m_intMinInt, ")");
					m_strPrompt += buf;
				}
			}
			else if(m_intMaxInt<0xFFFFFFFF){//最小为0
					sprintf(buf, "%s%d%s", "(范围:<=", m_intMaxInt, ")");
					m_strPrompt += buf;
			}
			break;
		case INPUT_DATE:
			memset(buf, 0, 4);
			if(memcmp(m_dateMin, buf, 4)){//有最小值
				Bcd2Str(m_dateMin, buf1, 4);
				memset(buf, 0xFF, 4);
				if(memcmp(m_dateMax, buf, 4)){//有最大值
					Bcd2Str(m_dateMax, buf2, 4);
					sprintf(buf, "%s%s%s%s%s", "(范围:", buf1, "--", buf2, ")");
					m_strPrompt += buf;
				}
				else{//无最大值
					sprintf(buf, "%s%s%s", "(范围:>=", buf1, ")");
					m_strPrompt += buf;
				}
			}
			else{//无最小值
				memset(buf, 0xFF, 4);
				if(memcmp(m_dateMax, buf, 4)){//有最大值
					Bcd2Str(m_dateMax, buf2, 4);
					sprintf(buf, "%s%s%s", "(范围:<=", buf2, ")");
					m_strPrompt += buf;
				}
			}
			break;
		default:
			break;
	}

	switch(m_InputFlag){
		case INPUT_AMOUNT:
			//m_ctrlInput.SetLimitText(11);
			m_ctrlInput.SetAmountFormat();
			break;
		case INPUT_BCD:
			//m_ctrlInput.SetLimitText(m_bcdLength * 2);
			m_ctrlInput.SetBcdFormat(m_bcdLength);
			break;
		case INPUT_FLTNUM:
			//m_ctrlInput.SetLimitText(10);
			m_ctrlInput.SetFltNumFormat();
			break;
		case INPUT_INT:
			/*
			length = 0;
			MaxInt = m_intMaxInt;
			while(MaxInt>0){
				MaxInt /= 10;
				length ++;
			}
			m_ctrlInput.LimitText(length);
			*/
			m_ctrlInput.SetIntFormat(m_intMinInt, m_intMaxInt);
			break;
		case INPUT_HEX:
			//m_ctrlInput.SetLimitText(m_hexLength * 2);
			m_ctrlInput.SetHexFormat(m_hexLength);
			break;
		case INPUT_STR:
			//m_ctrlInput.SetLimitText(m_strMaxLength);
			m_ctrlInput.SetStrFormat(m_strMaxLength);
			break;
		case INPUT_TIME:
			m_ctrlInput.SetTimeFormat();
			break;
		case INPUT_DATE:
			m_ctrlInput.SetDateFormat();
			//m_ctrlInput.SetLimitText(8);
			break;
		default:
			break;
	}

	m_strInput.Empty();
	UpdateData(FALSE);


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgLineInput::OnOK() 
{
	UpdateData(TRUE);
	char buf[500];

	memset(buf, 0, sizeof(buf));
	memcpy(buf, m_strInput.GetBuffer(m_strInput.GetLength()), m_strInput.GetLength());

	switch(m_InputFlag){
		case INPUT_INT:
			if(CheckIntInput(buf, m_intResult)!=SUCC){
				ShowMsg("输入格式错误.");
				return;
			}
			if(m_intResult>m_intMaxInt || m_intResult<m_intMinInt){
				ShowMsg("输入格式错误.");
				return;
			}
			break;
		case INPUT_BCD:
			if(CheckBcdInput(buf, m_bcdLength, m_bcdResult)!=SUCC){
				ShowMsg("输入格式错误.");
				return;
			}
			break;
		case INPUT_HEX:
			if(CheckHexInput(buf, m_hexLength, m_hexResult)!=SUCC){
				ShowMsg("输入格式错误.");
				return;
			}
			break;
		case INPUT_STR:
			break;
		case INPUT_AMOUNT:
			if(CheckAmountInput(buf, m_amountResult)!=SUCC){
				ShowMsg("输入格式错误.");
				return;
			}
			break;
		case INPUT_DATE:
			if(CheckStrDateFormat((unsigned char*)buf)!=SUCC){
				ShowMsg("输入格式错误.");
				return;
			}
			Str2Bcd(buf, m_dateResult, 8);
			if(CmpBcdDate(m_dateResult, m_dateMin)<0 ||
				CmpBcdDate(m_dateResult, m_dateMax)>0){
				ShowMsg("输入格式错误.");
				return;
			}
			bcd2greg(m_dateResult, (int&)m_Year, (int&)m_Month, (int&)m_Day);
			break;
		case INPUT_TIME:
			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;
			}
			m_Hour = (buf[0]-'0') * 10 + (buf[1]-'0');
			m_Minute = (buf[3]-'0') * 10 + (buf[4]-'0');
			m_Second = (buf[6]-'0') * 10 + (buf[7]-'0');
			if(m_Hour>23 || m_Minute>59 || m_Second>59){
				ShowMsg("输入格式错误.");
				return;
			}
			break;
		case INPUT_FLTNUM:
			if(CheckFltNumInput(buf, m_numWithoutDot, m_floatPartLength)!=SUCC){
				ShowMsg("输入格式错误.");
				return;
			}
			break;
		default:
			break;
	}
	CDialog::OnOK();
}

void CDlgLineInput::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	m_ctrlInput.SetFocus();
}

CDlgLineInput g_DlgLineInput;
void TestDlgLineInput()
{
//	int ret;
	//输入测试

	//输入字符串
	char PayUnit[41];
	g_DlgLineInput.SetTitle("输入付款单位");
	g_DlgLineInput.SetPrompt("请输入付款单位:");
	g_DlgLineInput.SetStrFormat(40);
	g_DlgLineInput.DoModal();
	g_DlgLineInput.GetStrResult(PayUnit);
	/*

	//输入日期
	unsigned char Date[5];
	unsigned int y;
	unsigned char m, d;
	unsigned char MinDate[5] = {0x20, 0x06, 0x01, 0x01};
	unsigned char MaxDate[5] = {0x20, 0x06, 0x12, 0x31};

	g_DlgLineInput.SetTitle("税控申报");
	g_DlgLineInput.SetPrompt("请输入申报数据截止日期:");
	g_DlgLineInput.SetDateFormat();
	g_DlgLineInput.SetMinDate(MinDate);
	g_DlgLineInput.SetMaxDate(MaxDate);
	ret = g_DlgLineInput.DoModal();
	g_DlgLineInput.GetDateResult(Date);
	g_DlgLineInput.GetDateResult(y, m, d);

	//输入整数
	unsigned int Num;
	g_DlgLineInput.SetTitle("查询单张发票");
	g_DlgLineInput.SetPrompt("请输入发票号:");
	g_DlgLineInput.SetIntFormat(0, 100);
	g_DlgLineInput.DoModal();
	g_DlgLineInput.GetIntResult(Num);

	//输入金额
	unsigned int Amount;
	g_DlgLineInput.SetTitle("付款");
	g_DlgLineInput.SetPrompt("请输入付款金额:");
	g_DlgLineInput.SetAmountFormat();
	g_DlgLineInput.DoModal();
	g_DlgLineInput.GetAmountResult(Amount);

	//输入数量
	unsigned int NumWithoutDot;
	unsigned char FloatPartLength;
	g_DlgLineInput.SetTitle("开票");
	g_DlgLineInput.SetPrompt("请输入项目数量:");
	g_DlgLineInput.SetFltNumFormat();
	g_DlgLineInput.DoModal();
	g_DlgLineInput.GetFltNumResult(NumWithoutDot, FloatPartLength);

	//输入BCD
	unsigned char BcdBuf[200];
	unsigned int BcdLength;
	g_DlgLineInput.SetTitle("BCD输入");
	g_DlgLineInput.SetPrompt("请输入BCD数:");
	g_DlgLineInput.SetBcdFormat(10);
	g_DlgLineInput.DoModal();
	g_DlgLineInput.GetBcdResult(BcdBuf, BcdLength);

	//输入十六进制数
	unsigned char HexBuf[200];
	unsigned int HexLength;
	g_DlgLineInput.SetTitle("HEX输入");
	g_DlgLineInput.SetPrompt("请输入十六进制数:");
	g_DlgLineInput.SetHexFormat(10);
	g_DlgLineInput.DoModal();
	g_DlgLineInput.GetHexResult(HexBuf, HexLength);

	//输入时间
	unsigned char Hour, Minute, Second;
	g_DlgLineInput.SetTitle("时间设置");
	g_DlgLineInput.SetPrompt("请输入时间:");
	g_DlgLineInput.SetTimeFormat();
	g_DlgLineInput.DoModal();
	g_DlgLineInput.GetTimeResult(Hour, Minute, Second);
	*/
}

⌨️ 快捷键说明

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