像Label这样的无窗口控件在运行时如何截取它的消息(如MouseDown)

解决方案 »

  1.   

    无窗口的控件应该没有专门的消息的,系统发送给它的容器控件。像 Label 这样的控件只不过是用 API在容器上面画出来的。
      

  2.   

    由于VB肯定登记了FORM里的LABEL的所在区域,而MOUSEDOWN之类的消息是会附带上坐标的,因此在VB里可以提供LABEL的MOUSEDOWN事件。
      

  3.   

    我是用VB.Controls.Add方法动态创建Label,而且不用控件数组的,需要捕捉到所增加的Label的事件,现在不知道怎么写呢
      

  4.   

    给你个例子
    Option ExplicitPrivate WithEvents lblTest      As LabelPrivate Sub Form_Load()
        
        Set lblTest = Controls.Add("VB.Label", "lblTest")
        
        With lblTest
            .Caption = "This is a test"
            .Move Width \ 2, Height \ 2
            .Visible = True
        End With
        
    End SubPrivate Sub lblTest_Click()
        MsgBox "This is a test", vbOKOnly, App.Title
    End Sub
      

  5.   

    谢谢楼上,不过你这个只是加一个label,我可能会加几个,而且数量不定,不用控件数组(不用控件数组的原因是我可能用VB.Linceses加一些另外的控件,这里只是拿Label做个例子),这样的话就不能用WithEvents声明变量的方法了,我希望能通过API消息的方式取得所加的控件的事件
      

  6.   

    就和我说的你可以仿照VB的做法,记录下它们的位置,在FORM的消息处理过程里检查鼠标点击的位置。