用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_MAP
END_MESSAGE_MAP()
4、运行之,应该可以了。
正文
用VC++做一个象模象样的记事本(文本编辑器)续22006-12-30 09:51:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/otot/22070.html
阅读(5455) | 评论(1)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论