我有一个.Net Winforms应用程序,它的ToolStrip包含几个ToolStripMenuItem。
我希望能够拦截ToolStripMenuItems上的鼠标按下事件。我已经定义了PreFilterMessage。我假设我应该能够捕获该过滤器中的事件。
bool IMessageFilter.PreFilterMessage(ref Message message)
{
switch (message.Msg)
{
}
}
我该怎么做?
是否使用了自定义消息?
捕获消息后,如何使用Message数据来获取被单击的实际ToolStripMenuItem?
1条答案
按热度按时间k2arahey1#
在
IMessageFilter
实现中,使用m.HWnd
属性通过调用Control.FromHandle
方法获取单击的ToolStripItem
的所有者控件,并将其转换为适当的条带类型。转换为基类ToolStrip
或其派生类之一。从
m.LParam
属性中获取点击点,以搜索条带的Items
集合,并找到其边界应包含该点(如果有的话)的点击项。如果您只需要处理下拉菜单的项,则将所有者控件的类型从基
ToolStrip
更改为派生ToolStripDropDownMenu
。或者检查返回项的类型以跳过
ToolStripSeparator
等类型。找出不同的方法here。