windows - 如何知道菜单项何时被点击?

标签 windows user-interface winapi rust win32gui

我正在使用 winsafe crate,想知道何时在窗口中单击了菜单项。

flags & MF_MOUSESELECT as u16 如果是,则应为 1,如果不是,则应为 0,但始终为 32768每次事件被触发时,即使它只是来自用户将鼠标悬停在菜单项上,或者甚至点击离开以使其关闭。

为什么?

self.wnd.on().wm(winsafe::co::WM::MENUSELECT, {
  move |params| {
    let wparam = params.wparam;
    let lparam = params.lparam;
    let flags = (wparam >> 16 & 0xffff) as u16;
    let MF_MOUSESELECT = 0x00008000 as u32;
    
    println!("{}", flags & MF_MOUSESELECT as u16);
    // always 32768

    0
  }
});

菜单由资源脚本生成,资源脚本编译并嵌入到程序中:

1 MENU
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
  POPUP "&File"
  {
    MENUITEM "&Open",  1
    MENUITEM "&Save",  2
  }
  POPUP "&Help"
  {
    MENUITEM "&About",  3
  }
}

最佳答案

您应该处理 WM_COMMAND。实际上有内置的菜单功能。只需提供您在资源文件中指定的 ID,即可检查相应菜单项何时被点击。

用这些替换你的事件监听器:

self.wnd.on().wm_command(co::CMD::Menu, 1, {
  move || {
    println!("Open clicked.")
  }
});

self.wnd.on().wm_command(co::CMD::Menu, 2, {
  move || {
    println!("Save clicked.")
  }
});

self.wnd.on().wm_command(co::CMD::Menu, 3, {
  move || {
    println!("About clicked.")
  }
});

关于windows - 如何知道菜单项何时被点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66963945/

相关文章:

c++ - 使用鼠标作为输入设备c++

jQuery slider - 设置背景颜色以显示所需的范围

c++ - GDI 打印的 MSDN 示例中缺少文件

c++ - 适用于 WinAPI 和 WinRT 的单个 DirectX/C++ 项目

windows - 如何调试 .BAT 脚本?

windows - 在 Windows 资源管理器中预览 matlab 图形(将图像设置为另一个文件的缩略图的实用程序)

mysql - 为 MySQL 上的数据加载禁用安全权限

c++ - 将 Qt GUI 添加到动态库

user-interface - Hue 安装在 vanilla hadoop 上

c++ - 将工具提示添加到 ComboBoxEx 失败