转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
用VB编写一个屏幕颜色拾取器         ★★★★

用VB编写一个屏幕颜色拾取器

作者:闵涛 文章来源:闵涛的学习笔记 点击数:756 更新时间:2009/4/23 15:43:44

设计状态下窗口中添加两个Frame控件做为容器,加入二个PictureBox控件,一个PictureClip控件(其中装入一个设计好的鼠标指针Mask图片),两个文本框控件,几个Label控件,两个Command控件,一个CheckBox控件。

屏幕颜色拾取器

代码如下:

Option Explicit

Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
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 StretchBlt Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal Height As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop 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 Sub SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40

Private Type POINTAPI
        X As Long
        Y As Long
End Type

Private Const SRCCOPY = &HCC0020
Private Const SRCAND = &H8800C6
Private Const SRCPAINT = &HEE0086

Dim MousePos As POINTAPI
Dim oldMousePos As POINTAPI

Private Sub Check1_Click()
''''设置顶层窗口
    If Check1.Value = 1 Then
        SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    Else
        SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    End If
End Sub

Private Sub Command1_Click()
''''开始停止捕捉屏幕
    If Command1.Caption = "停止" Then
        Command1.Caption = "开始"
        Timer1.Enabled = False
    Else
        Command1.Caption = "停止"
        Timer1.Enabled = True
    End If
End Sub

Private Sub Command2_Click()
''''退出程序
    Unload Me
End Sub

Private Sub Form_Activate()
''''程序启动后自动设置顶层窗口
    Check1.Value = 1
End Sub

Private Sub Timer1_Timer()
Dim WindowDC As Long
Dim Color As Long
Dim r As Integer, b As Integer, g As Integer
    GetCursorPos MousePos                                   ''''获取鼠标当前坐标
    ''''If MousePos.X = oldMousePos.X And MousePos.Y = oldMousePos.Y Then Exit Sub  ''''若未移动则返回
    Frame1.Caption = "坐标(" & MousePos.X & "," & MousePos.Y & ")"
    oldMousePos = MousePos
    WindowDC = GetWindowDC(0)                               ''''获取屏幕的设备场景
    Color = GetPixel(WindowDC, MousePos.X, MousePos.Y)      ''''获取鼠标所指点的颜色
    ''''分解RGB颜色值
    r = (Color Mod 256)
    b = (Int(Color \ 65536))
    g = ((Color - (b * 65536) - r) \ 256)
    Label1.BackColor = RGB(r, g, b)
    Text1.Text = r & "," & g & "," & b
    Text2.Text = WebColor(r, g, b)
    ''''将以鼠标位置为中心的9*9的屏幕图像放大
    StretchBlt Picture1.hDC, 0, 0, 73, 73, WindowDC, MousePos.X - 4, MousePos.Y - 4, 9, 9, SRCCOPY
    ''''将一个鼠标指针用Mask的方法透明的画到放大的图像中
    Picture2.Picture = PictureClip1.GraphicCell(1)
    BitBlt Picture1.hDC, 37, 37, 12, 21, Picture2.hDC, 0, 0, SRCAND
    Picture2.Picture = PictureClip1.GraphicCell(0)
    BitBlt Picture1.hDC, 37, 37, 12, 21, Picture2.hDC, 0, 0, SRCPAINT
    ''''获得是否按了热键F12
    If GetAsyncKeyState(vbKeyF12) <> 0 Then
        Timer1.Enabled = False
        Command1.Caption = "开始"
    End If
End Sub

Private Function WebColor(r As Integer, g As Integer, b As Integer) As String
''''将10进制RGB值转为Web颜色值
    WebColor = "#" & INT2HEX(r) & INT2HEX(g) & INT2HEX(b)
End Function

Private Function INT2HEX(Value As Integer) As String
''''10进制转16进制
    INT2HEX = Hex(Value)
    If Len(INT2HEX) = 1 Then
        INT2HEX = "0" & INT2HEX
    End If
End Function

运行效果:

屏幕颜色拾取器


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台