📄 memoedit.cpp
字号:
// MemoEdit.cpp : implementation file
//
#include "stdafx.h"
#include "c02ide.h"
#include "MemoEdit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMemoEdit
CMemoEdit::CMemoEdit()
{
m_bUseMask = true;
m_bMaskKeyInProgress = false;
m_strWindowText = _T("");
m_strMask = _T("");
m_strLiteral = _T("");
m_strValid = _T("");
m_strMaskLiteral = _T("");
}
CMemoEdit::~CMemoEdit()
{
}
BEGIN_MESSAGE_MAP(CMemoEdit, CRichEditCtrl)
//{{AFX_MSG_MAP(CMemoEdit)
ON_WM_KEYDOWN()
ON_WM_CHAR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMemoEdit message handlers
/*void CMemoEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if( m_bUseMask )
{
switch( nChar )
{
case VK_DELETE:
case VK_INSERT: return;
}
}
CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CMemoEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if( !m_bMaskKeyInProgress ) {
if( !CheckChar( nChar )) {
return;
}
}
if( m_bUseMask )
{
int nStartPos;
int nEndPos;
GetSel( nStartPos, nEndPos );
if( isprint( nChar ))
{
SetSel( nStartPos, nEndPos+1 );
Clear();
m_strWindowText.SetAt( nEndPos, nChar );
}
else if( nChar == VK_BACK )
{
if(( nStartPos == nEndPos ) &&
( nStartPos >= 1 ) &&
( nStartPos <= m_strWindowText.GetLength( )))
{
UINT c;
// get the masked literal representation.
if( !m_strMaskLiteral.IsEmpty( )) {
c = m_strMaskLiteral[ nStartPos-1 ];
}
// backspace the cursor.
SendMessage( WM_KEYDOWN, VK_LEFT, 0 );
if( !m_strMaskLiteral.IsEmpty( ))
{
// update the char backspacing over.
SendChar( c );
// backspace the cursor again.
SendMessage( WM_KEYDOWN, VK_LEFT, 0 );
}
}
else {
MessageBeep((UINT)-1);
}
return;
}
}
CRichEditCtrl::OnChar(nChar, nRepCnt, nFlags);
if( !m_bMaskKeyInProgress && m_bUseMask && !m_strLiteral.IsEmpty( ))
{
int nStartPos;
int nEndPos;
GetSel( nStartPos, nEndPos );
// make sure the string is not longer than the mask
if( nEndPos < m_strLiteral.GetLength( ))
{
UINT c = m_strLiteral.GetAt( nEndPos );
if (c != '_') {
SetSel( nEndPos+1, nEndPos+1 );
}
}
}
}
bool CMemoEdit::CheckChar(UINT nChar)
{
// do not use mask
if( !m_bUseMask ) {
return true;
}
// control character, OK
if( !isprint( nChar )) {
return true;
}
// unselect all selections, if any
int nStartPos, nEndPos;
GetSel( nStartPos, nEndPos );
SetSel( -1, 0 );
// advance to the first character input position.
for( nStartPos; nStartPos < m_strLiteral.GetLength(); ++nStartPos )
{
if( m_strLiteral.GetAt( nStartPos ) == '_' ) {
SetSel( nStartPos, nStartPos );
break;
}
}
// check the key against the mask
GetSel( nStartPos, nEndPos );
// make sure the string is not longer than the mask
if( nEndPos >= m_strMask.GetLength( )) {
MessageBeep((UINT)-1);
return false;
}
// check to see if a literal is in this position
UINT c = '_';
if( !m_strLiteral.IsEmpty( )) {
c = m_strLiteral.GetAt( nEndPos );
}
if( c != '_' ) {
SendChar( c );
GetSel( nStartPos, nEndPos );
}
// check the valid string character
if( m_strValid.Find( nChar ) != -1 ) {
return true;
}
if( ProcessMask( nChar, nEndPos ))
return true;
MessageBeep((UINT)-1);
return false;
}
void CMemoEdit::SendChar(UINT nChar)
{
m_bMaskKeyInProgress = true;
#ifdef WIN32
AfxCallWndProc(this, m_hWnd, WM_CHAR, nChar, 1);
#else
SendMessage(WM_CHAR, nChar, 1);
#endif
m_bMaskKeyInProgress = false;
}
bool CMemoEdit::ProcessMask(UINT nChar, int nEndPos)
{
// check the key against the mask
switch( m_strMask.GetAt( nEndPos ))
{
case '0': // digit only //completely changed this
{
if( isdigit( nChar )) {
return true;
}
break;
}
case '9': // digit or space
{
if( isdigit( nChar )) {
return true;
}
if( nChar == VK_SPACE ) {
return true;
}
break;
}
case '#': // digit or space or '+' or '-'
{
if( isdigit( nChar )) {
return true;
}
if( nChar == VK_SPACE || nChar == VK_ADD || nChar == VK_SUBTRACT ) {
return true;
}
break;
}
case 'L': // alpha only
{
if( isalpha( nChar )) {
return true;
}
break;
}
case '?': // alpha or space
{
if( isalpha( nChar )) {
return true;
}
if( nChar == VK_SPACE ) {
return true;
}
break;
}
case 'A': // alpha numeric only
{
if( isalnum( nChar )) {
return true;
}
break;
}
case 'a': // alpha numeric or space
{
if( isalnum( nChar )) {
return true;
}
if( nChar == VK_SPACE ) {
return true;
}
break;
}
case '&': // all print character only
{
if( isprint( nChar )) {
return true;
}
break;
}
case 'H': // hex digit
{
if( isxdigit( nChar )) {
return true;
}
break;
}
case 'X': // hex digit or space
{
if( isxdigit( nChar )) {
return true;
}
if( nChar == VK_SPACE ) {
return true;
}
break;
}
}
return false;
}
void CMemoEdit::SetEditMask(LPCTSTR lpszMask, LPCTSTR lpszLiteral, LPCTSTR lpszWindowText)
{
ASSERT(lpszMask);
ASSERT(lpszLiteral);
ASSERT(lpszWindowText);
// initialize the mask for the control.
m_strMask = lpszMask;
m_strLiteral = lpszLiteral;
m_strWindowText = lpszWindowText;
m_strMaskLiteral = m_strWindowText;
// set the window text for the control.
SetWindowText( lpszWindowText );
// initialize the font used by the control.
UpdateFont();
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -