我正在使用 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/