草庐IT

c++ - C++ 根据鼠标位置查找菜单项

coder 2024-06-22 原文

我正在尝试从另一个应用程序获取菜单项。

我可以通过手动获取主菜单的句柄并循环访问其子菜单来完成此操作。但是很难找出给定菜单有多少级子菜单。例如,如果我们查看 outlook View 菜单类似这样的东西, View -> 排列方式 -> 当前 View -> 消息。

所以我决定根据鼠标位置获取菜单项。但我找不到办法做到这一点。

请提出一些想法来做到这一点。

最佳答案

我怀疑 Windows 中的菜单系统的设计方式或多或少使您想要实现的目标变得不可能。

请注意,可能有一些非常规的方法可以解决这个问题,但我怀疑您会找到这样一种解决方案,其工作量比当前遍历菜单层次结构的策略要少。

事实是,菜单和子菜单的层次结构实际上是常规菜单树。在 MFC 中,您有一棵 CMenu 对象树,而在 win32 C api 中,它是一棵 HMENU 句柄树。

每个菜单,无论是子菜单还是主菜单,都有许多本身不是对象的项目。 IE。没有名为 CMenuItem 的 MFC 类,也没有名为 HMENUITEM 的 win32 API 句柄类型。如果您查看任何处理菜单的函数,它总是与传递菜单项的 ID 有关。例如看CMenu::EnableMenuItemCMenu::GetDefaultItem .

现在,真正的问题由两个事实组成 - 菜单项对于它们所在的菜单而言是本地的。如果您查看 C API 中的任何函数,您总是需要同时指定菜单句柄和菜单项 ID ,因为除非框架知道您在谈论哪个菜单对象,否则无法解析项目 ID。因此 ID 不是全局的。在 MFC 中,您通常不需要指定菜单句柄,但这当然是因为 CMenu 对象本身包装了 HMENU 句柄。

问题的第二部分是没有自然的方法从位置检索菜单(CMenu 或 HMENU)。您可以通过 MenuItemFromPoint 从位置获取菜单项。 ,但如您所见,您还需要菜单句柄,并且返回的 ID 仅在与您指定的菜单句柄结合使用时才有效。由于除了遍历子菜单层次结构之外,您无法通过任何其他方式获得该菜单句柄 - 您回到原点。

作为最后的说明 - Visual C++ 菜单 (CMenu) 的功能始终限于 Win32 C API menu functions 的功能。 ,因此未找到的任何功能或多或少都无法实现。

关于c++ - C++ 根据鼠标位置查找菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6261496/

有关c++ - C++ 根据鼠标位置查找菜单项的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  3. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  4. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  5. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  6. ruby - 正则表达式在哪个位置失败? - 2

    我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束

  7. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  8. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  9. ruby - 如何根据长度将路径数组转换为嵌套数组或散列 - 2

    我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa

  10. ruby-on-rails - 在 Rails 中更高效地查找或创建多条记录 - 2

    我有一个应用需要发送用户事件邀请。当用户邀请friend(用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和events_user组成。classEventdefinvite(user_id,*args)user_id.eachdo|u|e=EventsUser.find_or_create_by_event_id_and_user_id(self.id,u)e.save!endendend用法Event.first.invite([1,2,3])我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如Model.find_or_cr

随机推荐