C# 点击按钮外的区域会响应按钮消息

adgsq 2017-06-28 10:57:03
今天我做了一个工业项目,要求按钮有WM_LBUTTONDOWN和WM_LBUTTONUP的消息,但是vs2005并没有提供此类的消息,所以我搜索了论坛找到了一个帖子,地址如下
http://bbs.csdn.net/topics/390584447
我按照帖子的内容,的确是解决了这个问题,但是当我处理WM_LBUTTONDOWN这个消息的时候如果弹出对话框,如messagebox的话,再点击窗口的任意位置都会响应按下消息,求问怎么处理?!谢谢
partial class MouseAwareButton : Button
{
private const int WM_LBUTTONDOWN = 0x201;
private const int WM_LBUTTONUP = 0x202;
Control prevParent = null;

public event MouseEventHandler MyMouseUp;
public event MouseEventHandler MyMouseDown;

protected override void OnParentChanged(EventArgs e)
{
if (prevParent != null)
{
WndProcHooker.UnhookWndProc(this, WM_LBUTTONDOWN);
WndProcHooker.UnhookWndProc(this, WM_LBUTTONUP);
}
prevParent = Parent;

if (Parent != null)
{
WndProcHooker.HookWndProc(this, WM_LBUTTONDOWN_Handler, WM_LBUTTONDOWN);
WndProcHooker.HookWndProc(this, WM_LBUTTONUP_Handler, WM_LBUTTONUP);
}
base.OnParentChanged(e);
}

int WM_LBUTTONDOWN_Handler(IntPtr hwnd, uint msg, uint wParam, int lParam, ref bool handled)
{
int x = lParam & 0xffff, y = lParam >> 16;
MouseEventArgs args = new MouseEventArgs(MouseButtons.Left, 0, x, y, 0);
if (MyMouseDown != null)
{
MyMouseDown(this, args);

}
prevParent = null;
return 0;
}

int WM_LBUTTONUP_Handler(IntPtr hwnd, uint msg, uint wParam, int lParam, ref bool handled)
{
int x = lParam & 0xffff, y = lParam >> 16;
MouseEventArgs args = new MouseEventArgs(MouseButtons.Left, 0, x, y, 0);

if (MyMouseUp != null)
{
MyMouseUp(this, args);

}
prevParent = null;
return 0;
}

}
private MouseAwareButton button1;
this.button1 = new DeviceApplication2.MouseAwareButton();
this.button1.MyMouseDown += new System.Windows.Forms.MouseEventHandler(this.button1_Click);

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("测试");
count++;
label1.Text = count.ToString();
}
...全文
154 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
苍狼传说 2017-06-29
  • 打赏
  • 举报
回复
要判断事件是否在按钮范围内。鼠标事件有XY值,用这个来检测在不在button1的范围里面。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧