真心求教,搞了几天都没解决。
自己做了个控件,对外提供 OnClick 事件,就像标准按钮控件一样有OnClick 让用户自己编写点击事件处理。但现在不知道如何达到这个目的。我查阅了资料,有WM_LBUTTONDOWN、WM_LBUTTONUP、WM_LBUTTONDBLCLK,就是没有单击消息,请问如何解决?
刚开始想着看怎么用鼠标按下、松开的时间间隔组合WM_LBUTTONDOWN、WM_LBUTTONUP来实现单击,但效率太低,可行性太低。坐等高手解答,不胜感激!

解决方案 »

  1.   

    UserControl有Click
    在UserControl_Click中RaiseEvent即可,示例:Public Event Click() '声明事件
    Private Sub UserControl_Click()
    RaiseEvent Click    '激发事件
    End Sub
      

  2.   

    多谢恢复,但这个不能说明问题啊。我需要的是如何准确触发 Click() 事件,不是你命名为“Click” 就行。问题核心可以归结为:如何截获鼠标点击完成。可不是 WM_LBUTTONDOWN、WM_LBUTTONUP 哦。
      

  3.   

    RaiseEvent Click    这就是触发语句,名称无所谓,你叫Click123,表示的还是单击,关键是在UserControl_Click()事件中触发
      

  4.   

    用委托或钩子去撷取鼠标点击动作〜返回给自订的Click()事件〜
      

  5.   

    真的不太明白你的意思了,在控件中Event 可以声明一个事件,而这个事件是可以由用户自己编程处理的,而不是在控件内部处理,如果你想丢掉VB的事件处理特性而用窗口消息来处理,有点头疼,单击不是一个标准的WM消息,而是一个通知消息,你可以参考BM_CLICK、WM_COMMAND、BN_CLICKED消息,按钮的单击是在WM_COMMAND消息中处理的
      

  6.   

    补充下,我这其实应该不算是控件,而是带事件的class,所以关键是如何捕获点击消息,谢谢
      

  7.   

    对于按钮控件等,你可以捕获WM_COMMAND消息得到BN_CLICKED,而普通窗口好像是没有类似的标准消息的,你可以捕获WM_LBUTTONDOWN、WM_LBUTTONUP 得到,各类窗口对单击的定义好像不太一样,通常就是由WM_LBUTTONDOWN、WM_LBUTTONUP 组成,要注意WM_LBUTTONUP产生时鼠标指针不一定是在窗口上,可能是在窗口外,所以判断是否单击时还要判断鼠标指针是否在窗口中.