给EditCtrl添加自定义菜单并实现Copy,Cut和Paste功能
2011-04-22 20:23
507 查看
首先自定义一个类CEditCtrl,该类继承与CEdit。在类中添加OnContextMenu(CWnd*, CPoint);
在以上函数中的IDR_MENU_CONTEXT Menu中添加Copy,Cut和Paste项ID分别为ID_MENU_COPY, ID_MENU_CUT和ID_MENU_PASTE。
在CEdtiCtrl中添加这几个菜单项的响应函数
void CEdit::OnContextMenu(CWnd*, CPoint) { CMenu Menu; Menu.LoadMenu(IDR_MENU_CONTEXT); // IDR_MENU_CONTEXT是自定义的菜单的ID CMenu* pMenu = Menu.GetSubMenu( 0 ); CPoint Pos; GetCursorPos(&Pos); pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, Pos.x, Pos.y); }
在以上函数中的IDR_MENU_CONTEXT Menu中添加Copy,Cut和Paste项ID分别为ID_MENU_COPY, ID_MENU_CUT和ID_MENU_PASTE。
在CEdtiCtrl中添加这几个菜单项的响应函数
void CEditCtrl::OnMenuCopy() { CString sText; GetWindowText(sText); int nSelStart =0, nSelEnd = 0; GetSel(nSelStart, nSelEnd); std :: string sDest = sText; sDest = sDest.substr(nSelStart, nSelEnd-nSelStart); if ( OpenClipboard() ) { HGLOBAL ClipBuffer; char* pBuf; EmptyClipboard(); Clipbuffer = GlobalAlloc(GMEM_DDESHARE, sText.GetLength()+1); pBuf = (char*)GlobalLock(ClipBuffer): strcpy(pBuf, sDest.c_str()): GlobalUnlock(ClipBuffer); SetClipboardData(CF_TEXT, ClipBuffer); CloseClipboard(); } }
void CEditCtrl::OnMenuPaste() { CString sText; GetWindowText(sText); int nSelStart =0, nSelEnd = 0; GetSel(nSelStart, nSelEnd); std :: string sDest = sText; std :: string sFront = sDest.substr(0, nSelStart); std :: string sBack = sDest.substr(nSelEnd, sDest.size()); char* pBuf = NULL; if ( OpenClipboard() ) { HGLOBAL ClipBuffer; ClipBuffer = GetClipboardData(CF_TEXT); pBuf = (char*)GlobalLock(ClipBuffer): GlobalUnlock(ClipBuffer); CloseClipboard(); } if ( pBuf ) { sDest.clear(); sDest += sFront; sDest += pBuf; sDest += sBack; SetWindowText(sDest.c_str()); } SetSel((int)sDest.size(), –1); // 光标移到文字最后边。 } void CEditCtrl::OnMenuCut() { CString sText; GetWindowText(sText); int nSelStart =0, nSelEnd = 0; GetSel(nSelStart, nSelEnd); std :: string sSel = sText; sDest = sDest.substr(nSelStart, nSelEnd-nSelStart); if ( OpenClipboard() ) { HGLOBAL ClipBuffer; char* pBuf; EmptyClipboard(); Clipbuffer = GlobalAlloc(GMEM_DDESHARE, sText.GetLength()+1); pBuf = (char*)GlobalLock(ClipBuffer): strcpy(pBuf, sSel.c_str()): GlobalUnlock(ClipBuffer); SetClipboardData(CF_TEXT, ClipBuffer); CloseClipboard(); std :: string sTmp = sText; std :: string sFront = sTmp.substr(0, nSelStart); std :: string sBack = sTmp.substr(nSelEnd, sTmp.size()): std :: string sDest; sDest += sTmp; sDest += sBack; SetWindowText(sDest.c_str()); } }
相关文章推荐
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- SharePoint2010 Feature功能开发——为SharePoint的ECB菜单(列表项或文档的操作菜单项)添加自定义菜单栏项目
- IDocHostUIHandler::ShowContextMenu添加自定义菜单的另类实现
- WordPress自带菜单功能实现多级菜单及自定义样式
- 给DataGridVew添加右键菜单,并实现增删改等功能
- 用COM方法在CAD2006中实现添加自定义菜单
- 微信的多客服功能放在自定义菜单里面 这个功能如何实现?
- 实现UE添加自定义按钮之添加菜单
- java实现树的添加和取父节点,子节点;聚合树,实现选项菜单功能
- 干货一:通过自定义PopupWindow实现QQ菜单选项功能
- Android学习——自定义利用Scroller实现可循环滚动的动画菜单控件(功能完善待改进)
- 如何在微信的自定义菜单上实现“历史消息”功能?
- WPF禁用文本框的copy,paste,cut功能
- ListBox添加右键菜单并选择该项功能的实现
- 给CHtmlEditView添加自定义拖拽功能IDropTargetpdwEffectDROPEFFECT_COPY
- JS自定义功能函数实现动态添加网址参数修改网址参数值
- SharePoint2010 Feature功能开发——为SharePoint的ECB菜单(列表项或文档的操作菜单项)添加自定义菜单栏项目
- ASP.NET实现微信功能(1)(创建菜单,验证,给菜单添加事件)
- 自定义UITableViewCell实现左滑动多菜单功能LeftSwipe