在VB中如何鼠标点击处的颜色值

解决方案 »

  1.   

    我用API函数GetPixel(hdc,x,y),总是得不到hdc不知道是什么原因?
      

  2.   

    Private Type POINTAPI
        x As Long
        y As Long
    End Type
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As LongPrivate Sub Timer1_Timer()
        Static lX As Long, lY As Long
        On Local Error Resume Next
        Dim P As POINTAPI, h As Long, hD As Long, c As Long
        Dim R As Long, G As Long, B As Long
        GetCursorPos P
        If P.x = lX And P.y = lY Then Exit Sub
        lX = P.x: lY = P.y
        h = WindowFromPoint(lX, lY)
        hD = GetDC(h)
        ScreenToClient h, P    c = GetPixel(hD, P.x, P.y)    R = c And &HFF
        G = (c And &HFF00&) / &H100&
        B = (c And &HFF0000) / &H10000
        Me.BackColor = RGB(R, G, B)End Sub
      

  3.   

    基本上就是楼上这个意思,不过,你要注意及时释放资源(用GetDC获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC)