在 PictureBox 上画按钮,利用 PictureBox 的 MouseDown 和 MouseUp 事件来画边框。当 PictureBox_DblClick() 时,按钮看上去只按了一下。请问:如何才能获得实际的MouseDown 和 MouseUp ?最好能给出代码,不要类似的一句“用子类技术”或“根据消息...”.

解决方案 »

  1.   

    你在工程中加入下面的代码:
    Private Sub Picture1_DblClick()
        Debug.Print "DblClick"
    End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Debug.Print "Down"
    End SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Debug.Print "Up"
    End Sub双击一次图片框,你在立即窗口中会看到如下信息:
    Down
    Up
    DblClick
    Up所以你应该知道,只发生了一次Down,第二次Down被DblClick取代,所以你需要在DblClick加入绘制按下边框的代码。
      

  2.   

    上面的我明白了。麻烦的是:DblClick没有X、Y的坐标,而调用Picture1_MouseDown需要坐标。我的一张Picture里有很多按钮。我是根据坐标来定位按钮的。虽然可以用记录位置来解决,但是否能在DblClick事件中直接获得坐标。
      

  3.   

    既然是按钮就不必考虑双击的事件,按钮都是响应单击的。
    并且用PICURE控件来模拟按钮的成本也略微高了一点。
      

  4.   

    噢,这样啊,类似一个工具条。你可以在DblClick事件中用API函数GetCursorPos来获得光标的位置,这个位置是相对于整个屏幕的,同样,你可以用API函数ScreenToClient将这个位置传为相对于Picturebox中的位置,这样你就应该可以达到你的目的了。
      

  5.   

    “用PICURE控件来模拟按钮的成本也略微高了一点”
    -----------------------------------------------
    也许是题外话了,问一下:一个 PictureBox 相当于 几个 CommandButton (就成本而言)?by the way 本帖子一星期内一定结贴。
      

  6.   

    一个PictureBox相当于一个Form而已
      

  7.   

    可我问的是:相当于 几个 CommandButton
      

  8.   

    不要类似的一句“用子类技术”或“根据消息...”.拜托,你如果连子类还没有学会的话,还是先去找它23十个程序先看看.VB离开子类,简直什么都不是....使用之类后,只需要过滤"LeftDown"消息.即左键消息.在它的两个参数中,LP还是Wp中(自己一看就知道)包含了X,Y坐标值...分离一下.就可以知道Position了.
    直接要代码.小心被删贴.我是新来的副版主.以后不准 :)
      

  9.   

    上面补充一下.LP ,WP参数中的数值,是十六进制格式的.
      

  10.   

    落叶谍:
    我不知道你是不是副版主,也不会听你的什么“以后不准”。人各有能力,也各有所求。你所说的“只需要过滤"LeftDown"消息”,对我来讲跟没说的差不多,因为我就是仅仅知道这一点才来发帖子的。songyaowu就很好,解决问题。虽然与我想象的不太一样(我想象的就是如何过滤消息),但我已经按他的完成了。
    另外说一句:如果你这样的人是什么副版主,CSDN 在我的心目中不知是什么感觉了。你才二个三角,人家三颗星的也没有你这样的口气,请你回家先刷刷牙。
      

  11.   

    DblClick没有X、Y的坐标
    =================
    此时mousemove中的x,y就是DblClick的x,y了
      

  12.   

    DblClick没有X、Y的坐标
    =================
    此时mousemove中的x,y就是DblClick的x,y了