|IContextMenu第一部分:基本介绍( 二 )



在上面的代码中 , 首先我们创建 IContextMenu , 然后通过调用
IContextMenu::QueryContextMenu 对其进行初始化 。请注意 , 即使我们不打算显示菜单 , 我们仍然需要创建一个弹出菜单 , 因为 IContextMenu::QueryContextMenu 需要打开 。然而 , 我们实际上并没有显示结果菜单; 我们不是要求用户从菜单中选择一个项目 , 而是为用户做出选择并选择“播放” , 填充 CMINVOKECOMMANDINFO 结构并调用它 。
但是我们怎么知道正确的动作是“播放”呢? 在这种情况下 , 我们知道是因为我们将文件硬编码为“clock.avi” , 并且我们知道 AVI 文件有一个“播放”动作 。但当然 , 这在一般情况下是行不通的 。在开始调用默认动作之前 , 让我们先采取更简单的步骤 , 询问用户要调用什么动作 。
如果上面的代码就是你真正想要的(在文件上调用一个固定的动作) , 那么你不需要浏览所有上下文菜单的东西 。上面的代码等效于调用 ShellExecuteEx 函数 , 即传递 SEE_MASK_INVOKEIDLIST 标志并指示你希望调用IContextMenu的相关方法 。
总结【|IContextMenu第一部分:基本介绍】通过本文 , 我们应该可以基本了解IContextMenu的用法 。 后续会继续关注这一主题 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《How to host an IContextMenu part 1 – Initial foray》