正文

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

阅读(5455) | 评论(1)


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

评论

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