用VC++做一个象模象样的记事本(文本编辑器)续2之前步骤见《用VC++做一个象模象样的记事本(文本编辑器)》及续1生成的编辑器还没有右键菜单,所以得自己添加,接下来准备为文本编辑器添加右键弹出菜单。1、由于已经建立了一个类CMyRichEdit,因此为它增加右键响应函数。打开MFC ClassWizard 的MessageMaps,“Class name”选择“CMyRichEdit”,“Object IDs”选择“CMyRichEdit”,“Messages”选择“WM_RBUTTONDOWN”生成“ON_WM_RBUTTONDOWN”函数。2、为CMyRichEdit::RButtonDown函数添加内容如下:void CMyRichEdit::OnRButtonDown(UINT nFlags, CPoint point) { //设置为焦点 SetFocus(); //创建一个弹出式菜单 CMenu popmenu; popmenu.CreatePopupMenu(); //添加菜单项目 popmenu.AppendMenu(0, ID_MENU_EDIT_UNDO, "&Undo"); popmenu.AppendMenu(0, MF_SEPARATOR); popmenu.AppendMenu(0, ID_MENU_EDIT_CUT, "&Cut"); popmenu.AppendMenu(0, ID_MENU_EDIT_COPY, "C&opy"); popmenu.AppendMenu(0, ID_MENU_EDIT_PASTE, "&Paste"); //初始化菜单项 UINT nUndo=(CanUndo() ? 0 : MF_GRAYED ); popmenu.EnableMenuItem(ID_MENU_EDIT_UNDO, MF_BYCOMMAND|nUndo); UINT nSel=((GetSelectionType()!=SEL_EMPTY) ? 0 : MF_GRAYED) ; popmenu.EnableMenuItem(ID_MENU_EDIT_CUT, MF_BYCOMMAND|nSel); popmenu.EnableMenuItem(ID_MENU_EDIT_COPY, MF_BYCOMMAND|nSel); UINT nPaste=(CanPaste() ? 0 : MF_GRAYED) ; popmenu.EnableMenuItem(ID_MENU_EDIT_PASTE, MF_BYCOMMAND|nPaste); //显示菜单 CPoint pt; GetCursorPos(&pt); popmenu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this); popmenu.DestroyMenu(); CRichEditCtrl::OnRButtonDown(nFlags, point);}3、菜单生成了,但是还没有任何响应的动作,为菜单增加响应函数:在(MyRichEdit.cpp)中的MESSAGE_MAP添加以下代码:BEGIN_MESSAGE_MAP(CMyRichEdit, CRichEditCtrl) //{{AFX_MSG_MAP(CMyRichEdit) ON_WM_RBUTTONDOWN() ON_COMMAND(ID_MENU_EDIT_COPY, OnCopy) ON_COMMAND(ID_MENU_EDIT_CUT, OnCut) ON_COMMAND(ID_MENU_EDIT_PASTE, OnPaste) ON_COMMAND(ID_MENU_EDIT_UNDO, OnUndo) //}}AFX_MSG_MAPEND_MESSAGE_MAP()4、运行之,应该可以了。

评论