需要用到Richedit的右键菜单复制,粘贴功能。百度谷歌了一下,发现网上的文章都是零零碎碎,借鉴意义不大。于是,发扬我们桂电勇于挑战困难,努力进取的精神,终于完成了右键添加菜单和复制粘贴等功能。
大致分三个步骤:1.MFC添加右键菜单;2.添加菜单消息响应函数;3.菜单消息响应里使用剪切板实现复制,粘贴功能。
1.MFC添加右键菜单
1.建立一个基于对话框的的MFC程序。
2.Insert->Resource->Menu。
3.可以给menu改一个id,也可以不改。
4.把菜单搞成这样的(搞成别的样的也可以)。
5.在对话框对应的类上点右键 -> Add ClassWizard( WindowsMessage Handler) -> WM_CONTEXTMENU->编辑之。
6.修改OnContextMenu函数
{CSDN:COED:27}
voidCRButtonMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler codehere
CMenu popMenu;
popMenu.LoadMenu(IDR_RBTN_MENU); //载入菜单
CMenu *pPopup;
pPopup=popMenu.GetSubMenu(0); //获得子菜单指针
pPopup->EnableMenuItem(ID_1,MF_BYCOMMAND|MF_ENABLED); //允许菜单项使用
pPopup->EnableMenuItem(ID_2,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); //不允许菜单项使用
//ClientToScreen(&point); //将客户区坐标转换成屏幕坐标
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); //显示弹出菜单,参数依次为(鼠标在菜单左边|跟踪右键,x,y,this)
pPopup->Detach();
popMenu.DestroyMenu();
}
2.添加菜单消息响应函数
1.在资源窗口插入菜单,编辑菜单。(菜单名称后面加(&字母)就是快捷键)
2.在对话框右键>属性>常规 菜单选框中选择上面建立的菜单。
运行可以见到,对话框已建立起了菜单,下面开始添加响应事件
菜单每一项都有一个ID,可以在菜单窗口查看。1.在对话框的CPP文件里的响应事件列表中BEGIN_MESSAGE_MAP 加上: ON_COMMAND(ID_1, OnC1) // 第一个参数为菜单项ID,第二个参数为事件名称,这里命名为OnC1;
2.在对话框的类中(.h文件)添加成员函数声明: afx_msg void OnC1();
3.在对话框的CPP文件中加成员函数(菜单响应事件)的定义void CMyDlg::OnC1(){ MessageBox("Test ok");}
3. 菜单消息响应里 使用剪切板实现复制,粘贴功能。
下面的代码示范了如何将文本内容复制到剪贴板: