Duilib中为RichEdit\Edit控件添加自定义右键菜单
来源:互联网 发布:雷达图制作软件 编辑:程序博客网 时间:2024/05/02 02:07
前言
Duilib中的RichEdit控件在使用中发现,基本上对复制、粘贴、剪切等快捷方式都是支持的,不过唯一缺点是没有右键菜单,感觉不够好,于是就想着加上右键菜单。
右键菜单基本思路是,在RichEdit的消息处理函数中对鼠标的右键消息处理,发送一个自定义的Notify消息出来,主窗口中受到这个消息后弹出自己的右键菜单。
实现方法
第一步:把鼠标右键消息转发出来
MessageHandler中修改原有代码
bool bWasHandled = true; if( (uMsg >= WM_MOUSEFIRST && uMsg <= WM_MOUSELAST) || uMsg == WM_SETCURSOR ) { if( !m_pTwh->IsCaptured() ) { switch (uMsg) { case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: case WM_RBUTTONUP: { POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; CControlUI* pHover = GetManager()->FindControl(pt); if(pHover != this) { bWasHandled = false; return 0; }if ( uMsg == WM_RBUTTONUP ){GetManager()->SendNotify(this, DUI_MSGTYPE_RBTN_RICHEDIT);} } break; } }
#define DUI_MSGTYPE_RBTN_RICHEDIT (_T("rbtn_richedit"))
这个Notify需要自己定义,消息一经发送出去了,初步处理那是客户端的事了。你需要自定义右键菜单就对这个消息处理。
第二步:添加右键菜单
在主窗口的Notify函数中,弹出右键菜单
void CMainWnd::Notify( TNotifyUI& msg ){if ( _tcscmp(msg.sType, DUI_MSGTYPE_RBTN_RICHEDIT) == 0 ){CRichEditUI* pRichEdit = static_cast<CRichEditUI*>(msg.pSender);if ( NULL == pRichEdit )return ;CRichEditMenuWnd* pMenuWnd = new CRichEditMenuWnd(pRichEdit);pMenuWnd->Create(NULL, L"菜单", WS_POPUP, WS_EX_TOPMOST);POINT pt;GetCursorPos(&pt);pMenuWnd->MoveWindow(pt.x, pt.y, 104, 102, FALSE);pMenuWnd->ShowWindow();return ;}WindowImplBase::Notify(msg);}
第三步:对菜单的点击事件进行处理
void CRichEditMenuWnd::OnClick( TNotifyUI& msg ){if ( _tcscmp(msg.pSender->GetName(), _T("undo")) == 0 ){m_pRichEdit->Undo();}else if ( _tcscmp(msg.pSender->GetName(), _T("cut")) == 0 ){m_pRichEdit->Cut();}else if ( _tcscmp(msg.pSender->GetName(), _T("copy")) == 0 ){m_pRichEdit->Copy();}if ( _tcscmp(msg.pSender->GetName(), _T("paste")) == 0 ){m_pRichEdit->Paste();}Close();}
还好在SendNotify时我们发送了EichEdit控件的指针,在创建菜单时又把这个指针传给了菜单的构造函数,于是可以调用其成员函数实现复制、粘贴等功能了,多简单。
看看效果图,还是很满意的吧:
2 0
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- 关于如何为FormView中的Richedit/Edit添加右键菜单,并响应CTRL+C等快捷键
- WIN32窗口子类化----自定义Edit控件的右键菜单
- 为列表控件添加右键弹出菜单
- Duilib中RichEdit控件获取EN_CHANGE消息
- MFC指定控件中添加右键菜单
- MFC指定控件中添加右键菜单
- Flex4中添加自定义右键菜单
- 控件添加右键菜单
- Duilib创建添加自定义控件
- Richedit右键菜单
- Duilib中Richedit使用
- duilib richedit 添加文本提示
- 为lazyTreeGrid添加右键菜单
- 为QTreeView添加右键菜单
- 为windows添加右键菜单
- Delphi Edit右键系统菜单加自定义菜单项
- 红黑树—Red Black Tree
- 用到的几个gdb case
- Java系列-类与类之间的六种关系
- mac+apache+django+wsgi
- 读《数据结构学习指导和习题解答》(C++语言版)有感。
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- 初学C#_9
- RESTful入门——转自http://lavasoft.blog.51cto.com/62575/229206/
- poj 3190 Stall Reservations
- 【SICP练习】120 练习3.51
- java.lang.IllegalArgumentException: Wrong FS: hdfs://localhost:9000/out, expected: file:///
- 最近开发中遇到的问题汇总
- 判断1000--2000年之间的闰年
- java路径两种写法"/"和"\\"