我想捕获HScrollBar控件的左键抬起的事件,查找相关文件发现左键抬起的windows接口定义为0x0202
于是在自定义控件下继承HScrollBar类,重载WndProc,如下所示,但我发现就是不能捕获左键抬起的事件,其它事件
都没有问题,请各位大侠帮忙看看
public class MyHScrollBar : System.Windows.Forms.HScrollBar
 {
 protected override void WndProc(ref Message m)
 {
 const int WM_LBUTTONUP = 0x0202;
 const int WM_LBUTTONDOWN = 0x0201;
 const int WM_RBUTTONDOWN=0x0204;
 const int WM_RBUTTONUP=0x0205;
 if (m.Msg == WM_LBUTTONUP)//设断点,但就是不能捕获
 {
 //do something
 LButtonDownHandle();
 }
 if (m.Msg == WM_LBUTTONDOWN)//这以下都可以
 {
 LButtonDownHandle();
 }
 if (m.Msg == WM_RBUTTONDOWN)
 {
 LButtonDownHandle();
 }
 if (m.Msg == WM_RBUTTONUP)
 {
 LButtonDownHandle();
 }
 base.WndProc(ref m); // 这一步不能忘!
 }
 void LButtonDownHandle()
 {
 }
 }  

解决方案 »

  1.   

    处理WM_LBUTTONDOWN消息时, 执行LButtonDownHandle()即可,不必再执行父类的WndProc事件public class MyHScrollBar : System.Windows.Forms.HScrollBar 
     { 
     protected override void WndProc(ref Message m) 
     { 
     const int WM_LBUTTONUP = 0x0202; 
     const int WM_LBUTTONDOWN = 0x0201; 
     const int WM_RBUTTONDOWN=0x0204; 
     const int WM_RBUTTONUP=0x0205; 
     if (m.Msg == WM_LBUTTONUP)//设断点,但就是不能捕获 
     { 
     //do something 
     LButtonDownHandle(); 
     } 
     if (m.Msg == WM_LBUTTONDOWN)//这以下都可以 
     { 
     LButtonDownHandle(); 
     return;
     } 
     if (m.Msg == WM_RBUTTONDOWN) 
     { 
     LButtonDownHandle(); 
     } 
     if (m.Msg == WM_RBUTTONUP) 
     { 
     LButtonDownHandle(); 
     } 
     base.WndProc(ref m); // 这一步不能忘! 
     } 
     void LButtonDownHandle() 
     { 
     } 
     }  
      

  2.   

    HScrollBar本身没有LButtonDownHandle()事件啊,我没找到啊
      

  3.   

    LButtonDownHandle()不是事件,是一个受保护的方法.另外我在一楼的代码已经测试,是OK的