📄 dlginput.cpp
字号:
if ( bIsAdd == TRUE ) //!增加
{
if ( IsExceedLimit(1) ) //超出了限制
{
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount,m_nCount );
return ;
}
m_strInput = m_strInput + cChar ;
m_nCount++ ;
}
else //!修改
{
m_strInput = m_strInput.Left( m_strInput.GetLength( ) -1 ) + cChar ;
}
}
else //!当前光标不在最后
{
if ( bIsAdd == TRUE ) //!增加
{
if ( IsExceedLimit(1) ) //超出了限制
{
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount,m_nCount );
return ;
}
strRight = m_strInput.Right(m_strInput.GetLength( ) - m_nCount ) ;
m_strInput = m_strInput.Left( m_nCount ) ;
m_strInput = m_strInput + cChar + strRight ;
m_nCount++ ;
}
else //!修改
{
strRight = m_strInput.Right(m_strInput.GetLength( ) - m_nCount ) ;
m_strInput = m_strInput.Left( m_nCount -1 ) ;
m_strInput = m_strInput + cChar + strRight ;
}
}
this->UpdateData(FALSE) ;
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount-1,m_nCount ) ;
}
/*! @function public InputSpell********************************************************************************\brief 功能 : 输入拼音字母 <br>函数名 :\return void \exception \author zqp\remark <br>典型用法: <br>复杂度 : *******************************************************************************//////// comment generated by CommentMakerPro from www.FeinSoftware.com ////////void CDlgInput::InputSpell( int nBtnNO )
{
TCHAR aLowerChar[9][4] ={{'a','b','c'},{'d','e','f'},{'g','h','i'},
{'j','k','l'},{'m','n','o'},{'p','q','r'},
{'s','t','u'},{'v','w','x'},{'y','z',' '} };
TCHAR cChar ;
CFileTimeSpan tSpan ;
CFileTime tCurrTime =CFileTime::GetCurrentTime( ) ;
tSpan = tCurrTime - m_tPreTime ; //!前一次击键的时间间隔
BOOL bIsAdd = TRUE ; //! 是否是增加
if ( m_nPreBtnNo != nBtnNO ) //使用不同的字符
{
cChar = aLowerChar[nBtnNO-1][0] ;
}
else if ( ( m_nPreBtnNo == nBtnNO ) && ( tSpan >= m_nTimeGap*CFileTime::Millisecond ) )
{
cChar = aLowerChar[nBtnNO-1][0] ;
}
else if ( ( m_nPreBtnNo == nBtnNO ) && ( tSpan < m_nTimeGap*CFileTime::Millisecond ) ) //!击键间隔在1秒之内
{
CString strPos = m_strChar.Mid(m_strChar.GetLength( )-1 ,1) ;
for (int i = 0 ; i < 3 ; i++ )
{
if (aLowerChar[nBtnNO-1][i] == strPos )
break ;
}
if ( ( i== 3 ) || ( i ==2 ) )
{
cChar = aLowerChar[nBtnNO-1][0] ;
}
else
{
cChar = aLowerChar[nBtnNO-1][ i+1] ;
}
bIsAdd = FALSE ; //!置修改标志
}
m_nPreBtnNo = nBtnNO ; //置为前一次按键序号
m_tPreTime = tCurrTime ; //置为前一次按键时间
if ( bIsAdd == TRUE ) //!增加
{
if (m_strChar.GetLength( ) >= m_nCharMaxLen )
return ;
m_strChar = m_strChar + cChar ;
}
else //!修改
{
m_strChar = m_strChar.Left( m_strChar.GetLength( ) -1 ) + cChar ;
}
this->UpdateData(FALSE) ;
m_Inputer.Reset( ) ;
m_Inputer.Put(_T(m_strChar) ) ;
SpellQuery( ) ;
}
/*! @function public DeleteChar********************************************************************************\brief 功能 :删除一个字符 <br>函数名 :\return void 无返回值\exception \author zqp \remark <br>典型用法: <br>复杂度 : *******************************************************************************/void CDlgInput::DeleteChar( )
{
if ( m_nCount > 0 )
{
char cCount = m_strInput.GetAt(m_nCount-1) ;
if ( cCount<0 || cCount > 255 ) //!不是ASCII码字符
{
m_nCount-=2 ;
m_strInput.Delete(m_nCount,2 ) ;
}
else
{
m_nCount-- ;
m_strInput.Delete(m_nCount,1 ) ;
}
this->UpdateData(FALSE) ;
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount,m_nCount ) ;
}
}
/*! @function public InputNumber********************************************************************************\brief 功能 : <br>函数名 :@param nBtnNO int < insert parameter description here>\return void <insert return value description here>\exception \author \remark <br>典型用法: <br>复杂度 : *******************************************************************************//////// comment generated by CommentMakerPro from www.FeinSoftware.com ////////void CDlgInput::InputNumber( int nBtnNO ) //输入数字
{
TCHAR aChar[10] = {'1','2','3','4','5','6','7','8','9','0'} ;
TCHAR cChar = aChar[nBtnNO-1] ;
if ( IsExceedLimit(1) ) //超出了限制
{
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount,m_nCount );
return ;
}
CString strRight ;
if (m_strInput.GetLength( ) == m_nCount ) //当前的光标在最后
{
m_strInput = m_strInput + cChar ;
}
else //!当前光标不在最后
{
strRight = m_strInput.Right(m_strInput.GetLength( ) - m_nCount ) ;
m_strInput = m_strInput.Left( m_nCount ) ;
m_strInput = m_strInput + cChar + strRight ;
}
m_nCount++ ;
this->UpdateData(FALSE) ;
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount-1,m_nCount );
}
/*! @function public InputSymbol********************************************************************************\brief 功能 : 输入一些特殊的符号 <br>函数名 :\return void 无返回值\exception \author zqp\remark <br>典型用法:输入:'#','$' <br>复杂度 : *******************************************************************************//////// comment generated by CommentMakerPro from www.FeinSoftware.com ////////void CDlgInput::InputSymbol( )
{
CString strword ;
if ( IsExceedLimit(1) ) //超出了限制
{
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount,m_nCount );
return ;
}
int nIndex =m_lsList.GetCurSel( ) ;
nIndex = m_nCurrPage*m_nPageSize + nIndex ;
if ( ( nIndex > m_nSymbolCount ) || ( m_nPageCount < 1 ) )
return ;
strword = m_aSymbol[nIndex] ;
if (m_strInput.GetLength( ) == m_nCount ) //当前的光标在最后
{
m_strInput = m_strInput + strword ;
}
else //!当前光标不在最后
{
CString strRight = m_strInput.Right(m_strInput.GetLength( ) - m_nCount ) ;
m_strInput = m_strInput.Left( m_nCount ) ;
m_strInput = m_strInput + strword + strRight ;
}
m_nCount++ ;
this->UpdateData(FALSE) ;
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount,m_nCount );
}
//最接近的除法
/*! @function public NearDev********************************************************************************\brief 功能 : <br>函数名 :@param DevNum int 除数@param DevedNum int 被除数\return int 除法的结果\exception \author 邹清平 \remark <br>典型用法: 9/5 = 2 ; 6/5 =1 <br>复杂度 : *******************************************************************************//////// comment generated by CommentMakerPro from www.FeinSoftware.com ////////int CDlgInput::NearDev(int DevNum ,int DevedNum )
{
int nRec ,nMode ;
nRec = (int) DevedNum/DevNum ;
nMode = DevedNum % DevNum ;
if ( nMode > (int)DevNum/2 )
nRec++ ;
return nRec ;
}
void CDlgInput::OnLbnSelchangeList( )
{
// TODO: 在此添加控件通知处理程序代码
ChineseInputer::WordEnumerator::iterator it ;
int nIndex ;
if ( m_nMode == Char_Mode || m_nMode == Number_Mode ) //是字符输入模式
{
InputSymbol( ) ;
return ;
}
if ( IsExceedLimit(2) ) //超出了限制
{
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount,m_nCount );
return ;
}
nIndex = m_lsList.GetCurSel( ) ;
nIndex = m_nCurrPage * m_nPageSize + nIndex ;
//
int i = 0 ;
for( it = enumer.begin( ) ; it !=enumer.end() ;it++ )
{
if ( i == nIndex )
break ;
else
i++ ;
}
CString strword ="" ;
strword = (CString)(Word)(*it) ;
strword.TrimLeft( ) ;
strword = strword.Left(2);
if (m_strInput.GetLength( ) == m_nCount ) //当前的光标在最后
{
m_strInput = m_strInput + strword ;
}
else //!当前光标不在最后
{
CString strRight = m_strInput.Right(m_strInput.GetLength( ) - m_nCount ) ;
m_strInput = m_strInput.Left( m_nCount ) ;
m_strInput = m_strInput + strword + strRight ;
}
m_nCount++ ;
m_nCount++ ;
m_strChar = "" ;
m_strOrderFilter ="" ;
m_Inputer.Reset( ) ;
this->UpdateData(FALSE) ;
m_edtIn.SetFocus( ) ;
m_edtIn.SetSel(m_nCount,m_nCount );
}
void CDlgInput::OnEnMaxtextEdtin()
{
// TODO: 在此添加控件通知处理程序代码
::AfxMessageBox("超出了最大的长度" ) ;
}
/*! @function public IsExceedLimit********************************************************************************\brief 功能 : 判断是否超出输入框的最在长度 <br>函数名 :@param nInputLen int 需要输入的长度 \return BOOL TRUE 表示超出,FALSE 表示没有超出\exception \author 邹清平\remark <br>典型用法: <br>复杂度 : *******************************************************************************//////// comment generated by CommentMakerPro from www.FeinSoftware.com ////////BOOL CDlgInput::IsExceedLimit( int nInputLen )
{
if ( m_strInput.GetLength( ) + nInputLen > m_nInputMaxLen )
return TRUE ;
else
return FALSE ;
}
void CDlgInput::MakeSymbol( ) //生成特殊符号
{
CString stri ;
m_nPageCount = (int)( m_nSymbolCount/m_nPageSize) ; //总页数
//计数总页数
if ( (m_nSymbolCount % m_nPageSize ) != 0 )
m_nPageCount = m_nPageCount + 1 ;
m_nCurrPage = 0 ; //当前页码
int nIndex ;
m_lsList.ResetContent( ) ;
for (int i =1 ; i<= m_nPageSize ; i++ ) //m_it =enumer.begin( ) ; m_it !=enumer.end() ;m_it++
{
if ( i == 10 )
stri.Format("%d" ,0) ;
else
stri.Format("%d" ,i) ;
nIndex = m_nCurrPage*m_nPageSize + i - 1 ;
if ( nIndex >= m_nSymbolCount )
break ;
m_lsList.AddString( stri+ ":" + m_aSymbol[ nIndex] ) ;
}
}
void CDlgInput::SymbolHome( ) //首页
{
CString stri ;
if( m_nCurrPage == 0 || m_nPageCount == 0 ) //第一页
return ;
m_nCurrPage = 0 ; //当前页码
int nIndex ;
m_lsList.ResetContent( ) ;
for (int i = 1 ; i<= m_nPageSize ; i++ ) //m_it =enumer.begin( ) ; m_it !=enumer.end() ;m_it++
{
if ( i == 10 )
stri.Format("%d" ,0) ;
else
stri.Format("%d" ,i) ;
nIndex = m_nCurrPage*m_nPageSize + i-1 ;
if ( nIndex >= m_nSymbolCount )
break ;
m_lsList.AddString( stri+ ":" + m_aSymbol[ nIndex] ) ;
}
}
void CDlgInput::SymbolEnd( ) //末页
{
CString stri ;
if( m_nCurrPage == m_nPageCount-1 || m_nPageCount == 0 ) //最后一页
return ;
m_nCurrPage = m_nPageCount-1 ; //当前页码
int nIndex ;
m_lsList.ResetContent( ) ;
for (int i = 1 ; i<= m_nPageSize ; i++ ) //m_it =enumer.begin( ) ; m_it !=enumer.end() ;m_it++
{
if ( i == 10 )
stri.Format("%d" ,0) ;
else
stri.Format("%d" ,i) ;
nIndex = m_nCurrPage*m_nPageSize + i - 1 ;
if ( nIndex >= m_nSymbolCount )
break ;
m_lsList.AddString( stri+ ":" + m_aSymbol[ nIndex] ) ;
}
}
void CDlgInput::SymbolUpPage( ) //上一页
{
CString stri ;
if( m_nCurrPage == 0 || m_nPageCount == 0 ) //第一页
return ;
m_nCurrPage-- ; //当前页码
if ( m_nCurrPage < 0 )
m_nCurrPage = 0 ;
int nIndex ;
m_lsList.ResetContent( ) ;
for (int i = 1 ; i<= m_nPageSize ; i++ ) //m_it =enumer.begin( ) ; m_it !=enumer.end() ;m_it++
{
if ( i == 10 )
stri.Format("%d" ,0) ;
else
stri.Format("%d" ,i) ;
nIndex = m_nCurrPage*m_nPageSize + i - 1 ;
if ( nIndex >= m_nSymbolCount )
break ;
m_lsList.AddString( stri+ ":" + m_aSymbol[ nIndex] ) ;
}
}
void CDlgInput::SymbolDownPage( ) // 下一页
{
CString stri ;
if( m_nCurrPage == m_nPageCount-1 || m_nPageCount == 0 ) //最后一页
return ;
m_nCurrPage++ ; //当前页码
if ( m_nCurrPage > m_nPageCount-1 )
m_nCurrPage = m_nPageCount-1 ;
int nIndex ;
m_lsList.ResetContent( ) ;
for (int i = 1 ; i<= m_nPageSize ; i++ ) //m_it =enumer.begin( ) ; m_it !=enumer.end() ;m_it++
{
if ( i == 10 )
stri.Format("%d" ,0) ;
else
stri.Format("%d" ,i) ;
nIndex = m_nCurrPage*m_nPageSize + i-1 ;
if ( nIndex >= m_nSymbolCount )
break ;
m_lsList.AddString( stri+ ":" + m_aSymbol[ nIndex] ) ;
}
}
void CDlgInput::OnBnClickedBtn11( )
{
// TODO: 在此添加控件通知处理程序代码
if ( m_nMode == Char_Mode || m_nMode == Number_Mode ) //字符输入模式
MakeSymbol( ) ;
}
void CDlgInput::OnBnClickedRadupper( )
{
// TODO: 在此添加控件通知处理程序代码
if ( m_nUpperOrLower == CharUpper )
return ;
m_bUpper = FALSE ;
m_bLower =TRUE ;
m_nUpperOrLower = CharUpper ;
this->UpdateData(FALSE ) ;
}
void CDlgInput::OnBnClickedRadlower( )
{
// TODO: 在此添加控件通知处理程序代码
if ( m_nUpperOrLower == CharLower )
return ;
m_bUpper = TRUE ;
m_bLower =FALSE ;
m_nUpperOrLower = CharLower ;
this->UpdateData(FALSE ) ;
}
void CDlgInput::OnBnClickedBtnok( )
{
// TODO: 在此添加控件通知处理程序代码
OnOK( ) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -