右键菜单弹出后,鼠标指针问题.

来源:百度知道 编辑:UC知道 时间:2024/05/05 12:36:20
现在我用到了第三方控件M。
M置于panel1上面。

因为M没有右键菜单设置,所以设置了panel1的右键菜单。

现在的问题是,右击M,panel1的右键菜单弹出,但当鼠标到M上除右键菜单外其他位置时,鼠标不见了。

我想让鼠标在M上移动时也显示指针,但右键菜单弹出后,M的MouseMove事件就不响应了,因此不知道怎么办,哪位帮忙想想,能实现的话必定重谢。

百度知道怎么最后只能给100悬赏分。
一楼,这个也能弹出,但问题依然存在,无论怎么样弹出右键菜单,弹出后,鼠标在M上移动时都看不到鼠标的指针.
二楼,我现在能弹出右键菜单,关键是弹出后的鼠标显示问题。无论以哪种方式弹出右键菜单后,都不能正常显示M控件区域内的鼠标。

补充:M控件是一个类似于AutoCAD的画图控件,我看了一下AutoCAD2006,它画图区域的鼠标本来是十字形,弹出后键菜单后就成了Default型了。怎么实现这种效果。

楼上的问题,应该是控件 M 本身的问题,当鼠标移动到控件 M 时,该控件隐藏了鼠标指针(可能是作者有意而为之,或是 BUG),不过问题也很好解决。

方法有三:
一)你自己创建一个继承控件,继承于 M 控件,然后自己重写该控件的 WndPorc 消息处理函数,自己实现对消息的处理以便对鼠标的控制(缺点:可能会发生无法继承或无法重写 WndProc 函数的情形)。

二)对控件 M 实现子类化(即:调用 Windows API 函数 SetWindowLong),更改该控件的消息函数地址,以便你控制处理鼠标方面的问题(详细可以在百度里搜索“子类化”,保证结果很多)。

三)对控件 M 挂消息钩子(即:调用 Windows API 函数 SetWindowHookEx),勾住控件 M 消息以便处理(详细可以在百度里搜索“SetWindowHookEx”,保证结果很多)。

从你描述的信息上看,一旦弹出菜单后 MouseMove 事件都没有了,看起来应该是这个控件 M 存在 BUG 缘故,所以强烈建议你使用以上三个方案里面的其中一个方案来自行处理消息。

一般来说的化,第一个方法就可以解决了,若有不明白之处发消息给我。

private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
this.contextMenuStrip1.Show(MousePosition);
}
}

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)