void SMaskEdit::DeleteCharAt(int nPos) { ASSERT(PosInRange(nPos)); if (!PosInRange(nPos)) return; SStringT strMaskedText = GetMaskedText(nPos + 1) + m_chPrompt; SetMaskedText(strMaskedText, nPos, FALSE); }
void SMaskEdit::InsertCharAt(int nPos, TCHAR nChar) { ASSERT(PosInRange(nPos)); if (!PosInRange(nPos)) return; SStringT strMaskedText = SStringT(nChar) + GetMaskedText(nPos); SetMaskedText(strMaskedText, nPos, FALSE); }
void CDxMaskEdit::InsertCharAt(int nPos, TCHAR nChar) { ATLASSERT(PosInRange(nPos)); if (!PosInRange(nPos)) return; CString strMaskedText = CString(nChar) + GetMaskedText(nPos); SetMaskedText(strMaskedText, nPos, FALSE); }
void SMaskEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { if (!CanUseMask()) { __super::OnChar(nChar, nRepCnt, nFlags); return; } switch (nChar) { case VK_SPACE: case VK_BACK: return; // handled in WM_KEYDOWN } GetMaskState(); if (!PosInRange(m_nStartChar) || !IsPromptPos(m_nStartChar)) { NotifyPosNotInRange(); return; } TCHAR ch = (TCHAR)nChar; if (!CheckChar(ch, m_nStartChar)) { NotifyInvalidCharacter(ch, m_strMask[m_nStartChar]); return; } if (IsPrintChar(ch)) { ProcessChar(ch); SetMaskState(); } else { if (nChar != 127) __super::OnChar(nChar, nRepCnt, nFlags); } }
void SMaskEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if (!CanUseMask()) { __super::OnKeyDown(nChar, nRepCnt, nFlags); return; } BOOL bShift = (::GetKeyState(VK_SHIFT) < 0); BOOL bCtrl = (::GetKeyState(VK_CONTROL) < 0); switch (nChar) { case VK_UP: case VK_LEFT: case VK_HOME: { __super::OnKeyDown(nChar, nRepCnt, nFlags); GetMaskState(FALSE); int nStartChar = m_nStartChar; CorrectPosition(nStartChar, FALSE); if (m_nStartChar < nStartChar) { m_nStartChar = nStartChar; if (!bShift) m_nEndChar = nStartChar; } SetMaskState(); } return; case VK_DOWN: case VK_RIGHT: case VK_END: { __super::OnKeyDown(nChar, nRepCnt, nFlags); GetMaskState(FALSE); int iEndChar = m_nEndChar; CorrectPosition(iEndChar); if (m_nEndChar > iEndChar) { m_nEndChar = iEndChar; if (!bShift) m_nStartChar = iEndChar; } SetMaskState(); } return; case VK_INSERT: { if (bCtrl) { MaskCopy(); } else if (bShift) { MaskPaste(); } else { m_bOverType = !m_bOverType; // set the type-over flag } } return; case VK_DELETE: { GetMaskState(); if (m_nStartChar == m_nEndChar) { m_nEndChar = m_nStartChar +1; } else if (bShift) { MaskCopy(); } MaskDeleteSel(); SetMaskState(); } return; case VK_SPACE: { GetMaskState(); if (!PosInRange(m_nStartChar) || !IsPromptPos(m_nStartChar)) { NotifyPosNotInRange(); return; } TCHAR chSpace = _T(' '); if (!ProcessMask(chSpace, m_nStartChar)) chSpace = m_chPrompt; ProcessChar(chSpace); SetMaskState(); } return; case VK_BACK: { GetMaskState(FALSE); if (((m_nStartChar > 0) || (m_nStartChar == 0 && m_nEndChar != 0)) && (m_nStartChar <= m_strLiteral.GetLength())) { if (m_nStartChar == m_nEndChar) { m_nStartChar--; CorrectPosition(m_nStartChar, FALSE); if (m_bOverType && PosInRange(m_nStartChar)) { m_strWindowText.SetAt(m_nStartChar, m_strDefault[m_nStartChar]); m_nEndChar = m_nStartChar; } } MaskDeleteSel(); SetMaskState(); } else { NotifyPosNotInRange(); } } return; } __super::OnKeyDown(nChar, nRepCnt, nFlags); }