正文

用VC++做一个象模象样的记事本(文本编辑器)续22006-12-30 09:51:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/otot/22070.html

分享到:

用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、运行之,应该可以了。

阅读(5503) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册