我如何显示'发送到'和'打开方式'的上下文菜单?
前段时间我问过如何在Delphi中为某个文件弹出Windows上下文(右键单击)菜单。 然而,即使一切正常(几乎)好,“发送到...”和“打开...”子菜单都没有任何项目,即使当我在资源管理器中右键单击相同的文件名时工作确定。 (例如,'发送到...'有'桌面(创建shotcut)','电子邮件收件人'等)。
我怎样才能让这些菜单出现?
几年前,Raymond Chen在关于托管上下文菜单的多部分系列文章中撰写了这个精确的问题。 他的文章的关键主题是,当您阅读文档时,您必须记住您的程序正在播放shell的一部分,而文档通常是从实现上下文菜单界面的代码的角度编写的,而不是到调用它们的代码。
早在第二部分,陈先生就发现,发送和打开菜单显示为空白。 第5部分解决了您对这些子菜单的直接关注。 答案是你需要处理菜单消息 。 有一个与你的菜单相关的窗口句柄 - 你提供给TrackPopupMenuEx
的句柄(Issam对你问题的答案中的HND
)。 该窗口将在菜单处于活动状态时接收消息,并且需要将它们转发给实现菜单命令的对象。 该窗口有一个窗口过程,这就是你需要调用菜单接口的HandleMenuMsg
和HandleMenuMsg2
方法的地方。 这篇文章有一个例子。
文章系列的其他部分涵盖了当你说你的菜单“几乎”起作用时你无疑暗指的其他东西。 第3部分讨论属性对话框的出现位置。 第7部分关于调用默认动词。 我建议你阅读整个系列。 不要害怕一切都以C ++为基础; 它几乎是所有的接口方法和API函数,所以它应该转换到Delphi,而不会有太多麻烦。
链接地址: http://www.djcxy.com/p/91065.html上一篇: How can I display the 'Send to' and 'Open With' context menus?
下一篇: Django 1.11: Issues with utf8 writing to file on windows