源码地址:
http://mlzboy.jahee.com/pickcolor.rar
这是一个实现取色器功能的程序,有两个问题有解决,还请高手帮忙
1.在点击取色按钮后,我想在全屏可以取色,当点击鼠标左键后,就不进行取色了(不知道该如何获取鼠标点击这个事件,如果是在窗体里我是知道的,但是现在是在全屏上)
2.第二个是左上角的放大镜中的十字按钮,本来的意图是十字的交点就是鼠标指的那个点,但是现在好像对不准,肯请高手帮忙

解决方案 »

  1.   

    1、用SelectCapture捕获鼠标消息,用releaseCapture释放。
    用GetDC(0)获得屏幕DC,然后用GetPixel获像素值。
    2、这个可能和这个光标本身的问题,但是你可以自己计算误差是多少,再读取
      

  2.   

    我看用SetCapture比较困难,点了别的窗口会跑到前面来;
    用自己的一个全屏窗口把屏幕拷贝下来,再随便去就得了;还可以用鼠标钩子之类的方法,不过较难
      

  3.   

    简单点……把Command6_Click去掉
    加上这段就可以直接用鼠标拖动取色~Private Sub Command6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Timer1_Timer
    End Sub
      

  4.   

    或者进一步改成这样好用点~Private Sub Command6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = vbLeftButton Then
            Timer1_Timer
            Command6.MousePointer = 2
        Else
            Command6.MousePointer = 0
        End If
    End Sub
      

  5.   

    先说第一个问题:
    ' 声明 SetCapture
    Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long' 将你的 Command6_Click 过程改为
    Private Sub Command6_Click()
        SetCapture Me.hwnd
        Timer1.Enabled = True
    End Sub' 然后增加 Form_MouseDown 事件
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Timer1.Enabled = False
    End Sub' 因为要手动点击鼠标,所以无需使用 ReleaseCapture 来释放鼠标至于第二个问题,你可以在调试程序的时候同时打开别人的类似软件,看看他的中心和你的中心相不相同,如果不相同的话则重新设置十字偏移