private const int WM_LBUTTONDOWN  = 0x0201;
private const int WM_MOUSEMOVE    = 0x0200;
/// <summary>
/// 处理 Windows 消息,并可以选择将其路由到控件。
/// </summary>
/// <param name="m">要处理的 System.Windows.Forms.Message。</param>
protected override void WndProc(ref Message m)
{
Point p;
switch (m.Msg)
{
case WM_MOUSEMOVE:
p = new Point(m.LParam.ToInt32());
ChangeCursor(p);
break;
case WM_LBUTTONDOWN:
p = new Point(m.LParam.ToInt32());
ExecuteClickCommand(p);
break;
} base.WndProc(ref m);
}我的做法是这样的

解决方案 »

  1.   

    上面没有讲清楚,上面的方法是在.net中使用windows message,这样的话只要窗口有焦点,每个鼠标按键事件都会执行对应case下的code,你可以在每个case下做判断,是否在你的控件区域内单击,如果是的话,就调用你的单击事件OnMousedown().
      

  2.   

    用API函数SetWindowLong改变那个控件的消息响应函数可以到google上查"控件子类化"应该对你有点帮助
      

  3.   

    调用SetWindowLong的时候有没有成功?在什么时候调用的?不清楚具体情况,猜不出你的问题所在
      

  4.   

    我试了2楼说的方法,SetWindowLong这个方法我还不太明白,你能不能在详细一点,谢