代码之家  ›  专栏  ›  技术社区  ›  John Thomas

如何显示“发送到”和“使用”上下文菜单?

  •  3
  • John Thomas  · 技术社区  · 16 年前

    一段时间前我问过 how to pop up the Windows context (right-click) menu for a certain file in Delphi . 但是,即使一切工作(几乎)正常,“发送到…”和“用…”打开”子菜单也没有任何项目,即使当我在资源管理器中右键单击相同的文件名时,它们工作正常。(例如,'send to…'具有'desktop(create shotcut)'、'email recipient'等)。

    我怎样才能让那些菜单出现?

    1 回复  |  直到 11 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    陈瑞蒙几年前在一个关于托管上下文菜单的多部分系列文章中写到了这个精确的问题。他的文章的主要主题是,当你阅读文档时,你必须记住 你的 程序正在扮演shell的角色,而文档通常是从实现上下文菜单接口的代码的角度编写的,而不是从调用它们的代码的角度编写的。

    早在 part 2 陈观察到“发送到”和“用菜单打开”显示为空。 Part 5 解决您对这些子菜单的直接关注。答案是你需要 处理菜单消息 . 有一个窗口句柄与您提供的菜单句柄相关联。 TrackPopupMenuEx ( HND 在里面 Issam's answer 回答你的问题)。该窗口将在菜单处于活动状态时接收消息,并且需要将它们转发到实现菜单命令的对象。窗口有一个窗口过程,这就是您需要调用菜单界面的 HandleMenuMsg HandleMenuMsg2 方法。这篇文章有一个例子。

    文章系列的其他部分涵盖了当你说你的菜单“几乎”有效时,你毫无疑问提到的其他事情。 Part 3 讨论属性对话框出现的位置。 Part 7 关于调用默认动词。我建议你阅读整个系列。不要害怕所有的东西都在C++中,它几乎都是接口方法和API函数,所以它应该翻译成Delphi没有太多麻烦。

    推荐文章