winCE Edit Control 复制/粘贴
--作者:赖玉平([email protected])
在windows CE里MFC写程序,Edit Control控件使用得非常频繁,但是,默认情况下,你在该控件上输入的内容,是不支持复制粘贴的,也没有右键菜单,极为不方便,在google上找了没什么这方面的详细资料,只能看E文的帮助文档了,其实实现起来也不难,下面是步骤,分享一下方便后来者。
1)在PreTranslateMessage 中响应WM_RBUTTONDOWN 消息。(关于如何在MFC里重载PreTranslateMessage,可以看我另一篇博客),因为
<textarea cols="89" rows="28" name="code" class="cpp">BOOL NewSMSDlg::PreTranslateMessage(MSG* pMsg) { DWORD regValue; BOOL bPROCES; // static BOOL COM7STATE; switch(pMsg->message) { case WM_RBUTTONUP:/*Right Click message*/ { if(GetFocus()==GetDlgItem(IDC_EDIT_NEWWrite))//判断焦点在不在框内 { RETAILMSG(1,(TEXT("right BUTTON /r/n"))); POINT pt = {0}; GetCursorPos(&pt);//得到鼠标点击位置 //------生成对应的菜单--------------------------- CMenu menu; menu.CreatePopupMenu(); //生成菜单对象 menu.AppendMenu(MF_STRING,ContentEditCopy,L"复制"); menu.AppendMenu(MF_STRING,ContentEditPaste,L"粘贴"); menu.TrackPopupMenu(0,pt.x,pt.y,this);//pListCtrl menu.DestroyMenu(); } } break; default:break; } return CDialog::PreTranslateMessage(pMsg); } </textarea>
2) 响应菜单事件
MFC里菜单消息,都在OnCommand里处理,重载OnCommand函数,具体方法是,打开你EditControl控件所在的对话窗的头文件,然后把鼠标焦点在类里面,查看“属性”窗口,
如图:
然后在OnCommand里处理菜单操作,例如复制/粘贴
<textarea cols="87" rows="38" name="code" class="cpp">BOOL NewSMSDlg::OnCommand(WPARAM wParam, LPARAM lParam) { int menuID = LOWORD(wParam); switch(menuID) { case ContentEditCopy: //复制 { ::SendMessage(GetDlgItem(IDC_EDIT_NEWWrite)->GetSafeHwnd(), WM_COPY, 0, 0); break; } case ContentEditPaste: //粘贴 { ::SendMessage(GetDlgItem(IDC_EDIT_NEWWrite)->GetSafeHwnd(), WM_PASTE, 0, 0); break; } default:break; } return CDialog::OnCommand(wParam, lParam); } </textarea>
到这里,你程序中的EditControl控件就能实现复制、粘贴功能了。