添加Edit控件,ID设为:IDC_EDIT_TEST,添加Ctrl型变量:m_eTest,添加Value型变量:m_csTest。
重写PreTranslateMessage消息处理函数,拦截键盘消息"VK_TAB"。
BOOL MyEdit::PreTranslateMessage(MSG* pMsg)
{
CWnd* pWnd = GetDlgItem(IDC_EDIT_TEST);
if (pMsg->message == WM_KEYDOWN && WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST&&pWnd && pWnd->GetSafeHwnd() == pMsg->hwnd)
{
UINT iKey = (UINT)pMsg->wParam;
switch (iKey)
{
case VK_TAB:
{
UpdateData(TRUE);
CPoint pt=m_eTest.GetCaretPos();
int curPos = m_eTest.CharFromPos(pt);
int iStart = LOWORD(curPos);
int iEnd = -1;
iStart = m_csTest.Find('[', iStart);
if (iStart > 0)
{
iEnd = m_csTest.Find(']', iStart);
}
if (iEnd >0)
{
m_eTest.SetSel(iStart+1, iEnd, true);
return true;
}
return false;
}
}
}
}