首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于RichEdit(怎么截获Ctrl+Z快捷键删除掉的内容,以及鼠标拖拽的内容)

2012-04-22 
关于RichEdit(如何截获Ctrl+Z快捷键删除掉的内容,以及鼠标拖拽的内容)在使用RichEdit控件的时候,默认已经

关于RichEdit(如何截获Ctrl+Z快捷键删除掉的内容,以及鼠标拖拽的内容)
在使用RichEdit控件的时候,默认已经打开了关于编辑的几个快捷键,以及鼠标的拖拽功能。
请问:
1, 在我按下Ctrl+Z之后,并在RichEdit控件还没有响应撤销事件之前,要怎么做才能截取这段事件内发生的事件?
  要求实现:在作出Ctrl+Z动作后,读取将撤销的内容,由我决定是否执行Ctrl+Z的撤销操作。
  注:OnChar事件可以响应Ctrl+Z动作,但是却是在执行完撤销事件之后才响应的。
2, 要求实现:在作出拖拽动作后,读取拖拽选中的内容,由我决定拖拽操作是否生效。

[解决办法]
键盘钩子
HHOOK hhkKeyboard;
LRESULT KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
//MessageBeep(-1);
CString str;
str.Format("%c",wParam);
AfxMessageBox(str);
returnCallNextHookEx(hhkKeyboard,nCode,wParam,lParam);

}

if(!(hhkKeyboard=SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)KeyboardProc,AfxGetInstanceHandle(),GetCurrentThreadId())))
MessageBox("下钩子失败!");
[解决办法]
1、 处理ID_EDIT_UNDO WM_COMMAND或EN_CANUNDO消息

2、 实现IRichEditOleCallback回调接口, 用EM_SETOLECALLBACK消息将实现的回调接口绑定到Rich窗口控件

3、 实现IRichEditOleCallback.GetDragDropEffect()方法

大致代码如下
HRESULT __stdcall xxxxx::GetDragDropEffect(BOOL fDrag, DWORD grfKeyState,LPDWORD pdwEffect) 
{
*pdwEffect = FALSE; // FALSE 为取消拖拽, TRUE 或不设置该项为拖拽,可参考MSDN
return S_OK;
}
[解决办法]

C/C++ code
LRESULT   KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){       //MessageBeep(-1);    CString str;    str.Format("%X",wParam);    AfxMessageBox(str);    if(0x5A==wParam)        if(GetAsyncKeyState(VK_CONTROL)<0)            AfxMessageBox("Ctrl Z");            return    CallNextHookEx(hhkKeyboard,nCode,wParam,lParam);       } 

热点排行