描述:
前面已经有人问过,通过hook拦截系统消息的方法获得退格,删除键的消息
http://community.csdn.net/Expert/topic/4981/4981009.xml?temp=.7123987
我试了一下,能拦截到消息,但是拦截到消息后,该怎么让CEdit进行处理就不懂了。
我现在的做法是将消息转发给CEdit控件,但是发现还是删除不了文字。
if (lpMsg->message == WM_KEYUP && lpMsg->wParam == VK_BACK)
{
if (pMenuBar != NULL)
{
if (pMenuBar->m_edit.IsDialogMessage(lpMsg) == TRUE)
{
//AfxMessageBox("back"); // 这里有响应
//pMenuBar->m_edit.SendMessage(lpMsg->message, lpMsg->wParam, lpMsg->lParam);
SendMessage(pMenuBar->m_edit.m_hWnd, lpMsg->message, lpMsg->wParam, lpMsg->lParam);
}
}
}
还有一个问题,就是我应该在什么时候释放这个hook的钩子?
解决方案1:
CEdit重载OnKeyDown函数中添加
if(nChar == VK_BACK)
{
int nStart,nEnd;
GetSel(nStart,nEnd);
if(nStart != nEnd)
{
CString sContext;
GetWindowText(sContext);
ReplaceSel("",TRUE);
}
else
{
SetSel(nStart-1,nEnd);
ReplaceSel("",TRUE);
}
}
几个特殊键(方向、回车、退格)不能这样处理。Browser对象支持IOleInPlaceActiveObject接口,使用它的TranslateAccelerator方法来处理。