📄 filteredit.cpp
字号:
// FilterEdit.cpp : implementation file
//
#include "stdafx.h"
#include "FilterEdit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFilterEdit
CFilterEdit::CFilterEdit()
{
m_uMode = FT_NOLIMIT;
m_bShow = FALSE;
}
CFilterEdit::~CFilterEdit()
{
}
BEGIN_MESSAGE_MAP(CFilterEdit, CEdit)
//{{AFX_MSG_MAP(CFilterEdit)
ON_WM_CHAR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFilterEdit message handlers
//
void CFilterEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
//check mode
if(m_uMode == FT_NOLIMIT || nChar == VK_BACK)
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
return;
}
//chect filter
BOOL bfind(FALSE);
for(int i = 0; i < m_strFilter.GetLength(); i++)
{
if(nChar == UINT(m_strFilter.GetAt(i)))
{
bfind = TRUE;
break;
}
}
if(m_uMode == FT_ALLOW && !bfind)
{
OnWarning();
return;
}
if(m_uMode == FT_DISALLOW && bfind)
{
OnWarning();
return;
}
//check input limits
CString strTitle;
GetWindowText(strTitle);
int ncount = strTitle.Remove(nChar);
for(i = 0; i < m_InputLimitArray.GetSize(); i++)
{
if(UINT(m_InputLimitArray.GetAt(i).nchar) == nChar &&
int(m_InputLimitArray.GetAt(i).nlimit) <= ncount)
{
OnWarning();
return;
}
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
void CFilterEdit::SetMode(UINT uMode)
{
m_uMode = uMode;
}
void CFilterEdit::SelectStockType(UINT uType)
{
m_strFilter.Empty();
m_InputLimitArray.RemoveAll();
InputLimit tempItem;
switch(uType)
{
case FE_NUMBER:
m_strFilter = "0123456789";
m_uMode = FT_ALLOW;
break;
case FE_LOWERCASE:
m_strFilter = "abcdefghijklmnopqrstuvwxyz";
m_uMode = FT_ALLOW;
break;
case FE_UPPERCASE:
m_strFilter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
m_uMode = FT_ALLOW;
break;
case FE_CHARACTER:
m_strFilter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
m_uMode = FT_ALLOW;
break;
case FDT_FLOAT:
m_strFilter = "0123456789-.";
tempItem.nchar = '.';
tempItem.nlimit = 1;
m_InputLimitArray.Add(tempItem);
tempItem.nchar = '-';
tempItem.nlimit = 1;
m_InputLimitArray.Add(tempItem);
m_uMode = FT_ALLOW;
break;
case FDT_INTEGER:
m_strFilter = "0123456789";
tempItem.nchar = '-';
tempItem.nlimit = 1;
m_InputLimitArray.Add(tempItem);
m_uMode = FT_ALLOW;
break;
default:;
}
}
void CFilterEdit::ModifyFilter(CString strRemove, CString strAdd)
{
ModifyFilter(strRemove, strAdd, m_uMode);
}
void CFilterEdit::ModifyFilter(CString strRemove, CString strAdd, UINT uMode)
{
//Remove Codes
for(int i = 0; i < strRemove.GetLength(); i++)
{
m_strFilter.Remove(strRemove.GetAt(i));
for(int j = 0; j < m_InputLimitArray.GetSize(); j++)
{
if(strRemove.GetAt(i) == m_InputLimitArray.GetAt(j).nchar)
{
m_InputLimitArray.RemoveAt(j);
}
}
}
//Add Codes
for(i = 0; i < strAdd.GetLength(); i++)
{
if(m_strFilter.Find(strAdd.GetAt(i)) == -1)
m_strFilter += strAdd.GetAt(i);
}
//Set Mode
m_uMode = uMode;
}
void CFilterEdit::SetFilter(const CString& strKey, UINT uMode)
{
m_strFilter = strKey;
m_uMode = uMode;
}
void CFilterEdit::AddInputLimit(const CString& strKey, unsigned int nlimit)
{
InputLimit tempItem;
for(int i = 0; i < strKey.GetLength(); i++)
{
ModifyFilter(strKey.GetAt(i),strKey.GetAt(i));
tempItem.nchar = strKey.GetAt(i);
tempItem.nlimit = nlimit;
m_InputLimitArray.Add(tempItem);
}
}
void CFilterEdit::ClearInputLimit()
{
m_InputLimitArray.RemoveAll();
}
void CFilterEdit::SetWarnMessageBox(CString strWarning, CString strCaption, BOOL bShow /*= TRUE*/)
{
m_bShow = bShow;
m_strWarning = strWarning;
m_strCaption = strCaption;
}
void CFilterEdit::OnWarning()
{
MessageBeep(MB_OK);
if(m_bShow)
MessageBox(m_strWarning,m_strCaption,MB_OK);
}
CString CFilterEdit::GetClassImformation()
{
CString strLimit;
CString strLine;
strLimit.Empty();
for(int i = 0; i < m_InputLimitArray.GetSize(); i++)
{
strLine.Format(_T("(%c,%d)"),m_InputLimitArray.GetAt(i).nchar,m_InputLimitArray.GetAt(i).nlimit);
strLimit += strLine;
}
CString strIm;
strIm.Format(_T("Filter:%s\r\nLimits:%s"),m_strFilter,strLimit);
return strIm;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -