热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎样在CRichEditCtrl控件中加入自己的右键菜单?

我想在自己编的程序中,当鼠标右击RichEdit控件时,能在该控件中在鼠标的当前位置弹出右键菜单。可是对该控件进行消息映射时发现没有像视图类那样的WM_RBUTTONDOWN消息,仅有一个NM_RCL
我想在自己编的程序中,当鼠标右击RichEdit控件时,能在该控件中在鼠标的当前位置弹出右键菜单。可是对该控件进行消息映射时发现没有像视图类那样的WM_RBUTTONDOWN消息,仅有一个NM_RCLICK消息,映射后,发现生成的消息映射函数的参数中根本没有当前鼠标的坐标,该怎么在该控件中实现右键菜单呢?

12 个解决方案

#1



BOOL CPopupDemoDlg::OnInitDialog() 

   m_RichEdit.SetEventMask(ENM_MOUSEEVENTS);
...


//
BOOL CPopupDemoDlg::PreTranslateMessage(MSG* pMsg)

    if (pMsg->message ==WM_RBUTTONDOWN)
    {
        CWnd * pWnd = (CWnd*) GetDlgItem(IDC_RICHEDIT); 
        if (pWnd ==GetFocus())
        {
              CMenu menu;
              DWORD dwSelectionMade; VERIFY(menu.LoadMenu(IDR_MENU1));
              CMenu *pmenuPopup = menu.GetSubMenu(0);
              ASSERT(pmenuPopup != NULL);                                    
              dwSelectionMade = pmenuPopup->TrackPopupMenu( (TPM_LEFTALIGN|
                                                                TPM_LEFTBUTTON|
                                                                TPM_NONOTIFY|
                                                                TPM_RETURNCMD),
                                                                 pMsg->pt.x, 
                                                                 pMsg->pt.y, this
                                                          );  
              pmenuPopup->DestroyMenu();
             //excercise for the reader...deal with the selection the user has made here
             return TRUE;
               }
    }
    return CDialog::PreTranslateMessage(pMsg);
}
//

#2


ON_WM_CONTEXTMENU

#3


ahao(天·狼·星星)您好!
我查了msdn关于SetEventMask()的内容:DWORD SetEventMask( DWORD dwEventMask );
其中的dwEventMask风格参数却没有查到,只是找到了这么一句话:The default event mask (before any is set) is ENM_NONE.

您能告诉我您用的"ENM_MOUSEEVENTS"是系统定义的还是您自定义的呢?如果是自定义的,能告诉我该如何定义吗?像自定义消息一样用#define吗?
还有就是PreTranslateMessage()是重载的虚函数吗?我没用过这个函数,能给我讲讲这个函数的作用吗?我还想知道它的参数“MSG* pMsg”是从哪来的?
能给我讲讲吗?多谢!!

#4


ENM_MOUSEEVENTS 这个是系统定义的,直接可以用了
MSDN里应该有的,你的MSDN估计不是很新

PreTanslateMessage是虚函数,
CWinApp在把消息分发给windows窗口函数之前会调用这个虚函数

MSG就是一个结构,里面有消息相关的一些数据

你按我上面说的做,一定可以成功的

#5


CWinApp::PreMessageTranslate和CWnd::PreMessageTranslate相当有用,它可以在应用程序的主窗口中接受各类消息

#6


ahao(天·狼·星星)您好!
我按您的做了,能实现右键菜单!可是却又冒出了个没想到的问题:原来在菜单中第一的功能京都没有了。我是首先在工程中定义了一个主菜单,将它的第二栏子菜单作为弹出的菜单:CMenu *pmenuPopup = menu.GetSubMenu(1);   在运行后窗口的主菜单中,这个菜单中的每个菜单项的功能都执行得很好,(我本来已经对他们都消息映射过了,而且消息映射函数都写了);可是,在RichEditCtrl中弹出的菜单,明明是一样的,但功能却没有,这是怎么回事啊??怎么会出现这种情况呢?

#7


:)第二行“第一”打错了,是“定义”。“京”是“竟”。

#8


我的程序是一个子对话框的程序。先建立了一个主对话框,然后建立了两个子对话框,并将这两个子对话框作为主对话框类的对象成员。在主对话框的OnInitDialog()函数中,生成两个非模态的子对话框,一个显示,一个隐藏,并同时加载一个菜单。在该菜单中有一项,当点击时便使当前显示的子对话框隐藏,而隐藏的子对话框显示,同时改变主对话框加载的菜单,我也正是想让弹出式菜单对应这个菜单的第二个子菜单(里面有5个菜单项)。
我在第二个子对话框中加入了一个CRichEditCtrl控件。用您给我的方法,成功地加载了弹出式菜单,但是菜单的功能却没有了。点击每个弹出式菜单的菜单项,丝毫没有响应。而我明明已经在主对话框类中对它进行了消息映射。在主菜单中点击时功能是正常的。
这是怎么回事呢?
点击菜单时发出的WM_COMMAND消息难道没被发到主对话框的消息循环中吗?(我前面说了,是在主对话框类中对菜单进行的消息映射。)是被PreTranslateMessage(MSG* pMsg)函数给提前截获了吗??
我对菜单重新在第二个子对话框类中进行了消息映射,可是还是没有结果。
能告诉我原因吗?该怎样解决???

急!!!


#9


:)这个问题很容易解决
在TrackPopupMenu中有个参数TPM_RETURNCMD看到了吗?
把它去掉就可以了。
有这个参数的话,直接返回你选中的菜单ID,消息不进主循环了。

#10


ahao,您好!!真是太感谢您了!!!
我照你的方法,马上就实现了。

你真是太厉害了!我简直佩服得五体投地。。。    :)

请你吃饭吧,呵呵。
我学vc已经半年多了,可实践的经验却非常少,做过的东西很少,对vc理解的也很浅薄。同样一个问题,您能手到病除,而我却郁闷了一天了。唉,我真的好佩服你啊。能收我做徒弟吗?我的e-mail是thebesghost@163.com,能否把您的信箱告诉我,我会有许多问题问您。
承蒙帮助,感恩之至!

#11


:)解决了就好,我的email,a_hao@21cn.com,有问题可以问我,我知道的话会帮你的,做师傅就不敢了,我的水平还很一般。

#12


谦虚!
:)谢谢你!我把你的地址记下了,但愿我们能成为好朋友。

推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
author-avatar
幽灵-玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有