非MFC下如果让edit不能粘贴

孟如庭 2015-09-23 02:39:56
rt。
没有用MFC。使用了WndProcess,怎么让edit不能粘贴呢?

焦点进入edit中,就拦截不到WM_RBUTTONUP了
...全文
151 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2015-09-24
  • 打赏
  • 举报
回复
引用 5 楼 lsq19871207 的回复:
ctrl+v怎么拦截 -----------------------

switch(uMsg)
{
case WM_KEYDOWN:
	if(wParam=='V' && GetKeyState(VK_CONTROL)&0x80)
		return;	//直接返回,阻止当前操作
	break;
default:
	break;
}
拦截按键,治标不治本…………
孟如庭 2015-09-24
  • 打赏
  • 举报
回复
竟然还有这个。。。不过我直接拦截WM_PASTE就没问题了
引用 6 楼 zhao4zhong1 的回复:
提醒:粘贴还可以用Shift+Ins
赵4老师 2015-09-24
  • 打赏
  • 举报
回复
提醒:粘贴还可以用Shift+Ins
信阳毛尖 2015-09-23
  • 打赏
  • 举报
回复
ctrl+v怎么拦截 -----------------------

switch(uMsg)
{
case WM_KEYDOWN:
	if(wParam=='V' && GetKeyState(VK_CONTROL)&0x80)
		return;	//直接返回,阻止当前操作
	break;
default:
	break;
}
「已注销」 2015-09-23
  • 打赏
  • 举报
回复
WM_PASTE WM_COPYDATA 试试拦截这些消息
schlafenhamster 2015-09-23
  • 打赏
  • 举报
回复
HWND CreateEdit(HWND parentWnd) { HWND hEd=0; hEd = CreateWindow("EDIT", NULL, WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_BORDER | WS_VSCROLL |WS_HSCROLL | ES_AUTOVSCROLL | ES_AUTOHSCROLL| ES_MULTILINE | ES_WANTRETURN, 4, 250, 300, 80, parentWnd, (HMENU)IDC_EDIT, (HINSTANCE) GetWindowLong(parentWnd, GWL_HINSTANCE), NULL); SetWindowText(hEd," An Edit with ES_MULTILINE and ES_WANTRETURN style!"); // return hEd; }
孟如庭 2015-09-23
  • 打赏
  • 举报
回复
部分代码没看懂,思路理解了。CreateEdit是什么函数,我都没搜到。 WM_RBUTTONUP拦截了,在问下,ctrl+v怎么拦截?
引用 1 楼 schlafenhamster 的回复:
子类化 这个 Edit m_hEdit=CreateEdit(hwnd); WNDPROC EdOldProc = (WNDPROC)SetWindowLong(m_hEdit, GWL_WNDPROC, (LONG)EDProc); SetProp(m_hEdit,// handle of window "EditOldProc", // atom or address of string EdOldProc); 、、 LRESULT CALLBACK EDProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {// get oldproc WNDPROC OldEdProc=(WNDPROC)GetProp(hWnd,"EditOldProc"); char buf[100]= {0}; switch(Msg) { case WM_NOTIFY: // OutputDebugString("notify\n"); break; case WM_KEYDOWN: OutputDebugString("WM_KEYDOWN\n"); break; case WM_KEYUP: OutputDebugString("WM_KEYUP\n"); break; case WM_CHAR: if((TCHAR) wParam==VK_RETURN) { CallWindowProc(OldEdProc, hWnd, Msg, wParam, lParam); POINT pt; DWORD pos; int idx; // insert the indent GetCaretPos(&pt); pos=SendMessage(hWnd,EM_CHARFROMPOS,0,MAKELPARAM(pt.x, pt.y)); idx=LOWORD(pos); SendMessage(hWnd,EM_SETSEL,idx,idx); SendMessage(hWnd,EM_REPLACESEL,0,(LPARAM)" "); return 0; } break; } return CallWindowProc(OldEdProc, hWnd, Msg, wParam, lParam); }
schlafenhamster 2015-09-23
  • 打赏
  • 举报
回复
子类化 这个 Edit m_hEdit=CreateEdit(hwnd); WNDPROC EdOldProc = (WNDPROC)SetWindowLong(m_hEdit, GWL_WNDPROC, (LONG)EDProc); SetProp(m_hEdit,// handle of window "EditOldProc", // atom or address of string EdOldProc); 、、 LRESULT CALLBACK EDProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {// get oldproc WNDPROC OldEdProc=(WNDPROC)GetProp(hWnd,"EditOldProc"); char buf[100]= {0}; switch(Msg) { case WM_NOTIFY: // OutputDebugString("notify\n"); break; case WM_KEYDOWN: OutputDebugString("WM_KEYDOWN\n"); break; case WM_KEYUP: OutputDebugString("WM_KEYUP\n"); break; case WM_CHAR: if((TCHAR) wParam==VK_RETURN) { CallWindowProc(OldEdProc, hWnd, Msg, wParam, lParam); POINT pt; DWORD pos; int idx; // insert the indent GetCaretPos(&pt); pos=SendMessage(hWnd,EM_CHARFROMPOS,0,MAKELPARAM(pt.x, pt.y)); idx=LOWORD(pos); SendMessage(hWnd,EM_SETSEL,idx,idx); SendMessage(hWnd,EM_REPLACESEL,0,(LPARAM)" "); return 0; } break; } return CallWindowProc(OldEdProc, hWnd, Msg, wParam, lParam); }

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧