如何显示“发送到”和“打开方式”上下文菜单?

qv7cva1a  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(151)

不久前,我问起了how to pop up the Windows context (right-click) menu for a certain file in Delphi。然而,即使一切工作(几乎)正常,“发送到...”和“开场白……”子菜单没有任何项目,即使当我在资源管理器中右键单击相同的文件名时,它们也可以正常工作。(例如,‘发送到...’有‘桌面(创建快照)’、‘电子邮件收件人’等)。

我怎么才能让这些菜单出现呢?

vyswwuz2

vyswwuz21#

几年前,雷蒙德·陈(Raymond Chen)在一个由多部分组成的关于主持上下文菜单的系列文章中写到了这个确切的问题。他文章的主要主题是,当您阅读文档时,您必须记住您的程序扮演的是外壳的一部分,而文档通常是从实现上下文菜单界面的代码的Angular 编写的,而不是从调用它们的代码的Angular 编写的。

早在part 2,陈就观察到Send-to和Open-with菜单显示为空。Part 5解决了您对这些子菜单的直接关注。答案是您需要处理菜单消息。有一个与您的菜单相关联的窗口句柄-您提供给TrackPopupMenuEx的句柄(在Issam对您的问题的回答中为HND)。该窗口将在菜单处于活动状态时接收消息,并且需要将消息转发给实现菜单命令的对象。该窗口有一个窗口过程,您需要在其中调用菜单界面的HandleMenuMsgHandleMenuMsg2方法。这篇文章有一个例子。

本系列文章的其他部分介绍了当您说您的菜单“几乎”有效时,您无疑提到的其他事情。Part 3讨论属性对话框出现的位置。Part 7关于调用默认 predicate 。我建议你阅读整个系列。不要害怕一切都是用C++编写的;它几乎都是接口方法和API函数,所以它应该可以毫不费力地转换成Delphi。

相关问题