VB 设置控件边框颜色,比如:ListBox、TextBox、PictureBox、ComboBox等等….
调用方法:

'setBorderColor (控件句柄,颜色值)  setBorderColor Text1.hWnd, vbRed

Option Explicit
Private Type RECTW
    Left                As Long
    Top                 As Long
    Right               As Long
    Bottom              As Long
    Width               As Long
    Height              As Long
End Type

Private Type RECT
    Left        As Long
    Top         As Long
    Right       As Long
    Bottom      As Long
End Type

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hWnd As Long, ByVal lpString As String) As Long
Private Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hWnd As Long, ByVal lpString As String) As Long
Private Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hWnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function FrameRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long

Private Const WM_DESTROY        As Long = &H2
Private Const WM_PAINT          As Long = &HF
Private Const WM_NCPAINT        As Integer = &H85
Private Const GWL_WNDPROC = (-4)
Private Color As Long

Public Sub setBorderColor(hWnd As Long, Color_ As Long)
    Color = Color_
    If GetProp(hWnd, "OrigProcAddr") = 0 Then
        SetProp hWnd, "OrigProcAddr", SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
    End If
End Sub

Public Sub UnHook(hWnd As Long)
    Dim OrigProc As Long
    OrigProc = GetProp(hWnd, "OrigProcAddr")
    If Not OrigProc = 0 Then
        SetWindowLong hWnd, GWL_WNDPROC, OrigProc
        OrigProc = SetWindowLong(hWnd, GWL_WNDPROC, OrigProc)
        RemoveProp hWnd, "OrigProcAddr"
    End If
End Sub
Private Function OnPaint(OrigProc As Long, hWnd As Long, uMsg As Long, wParam As Long, lParam As Long) As Long
    Dim m_hDC       As Long
    Dim m_wRect     As RECTW
    OnPaint = CallWindowProc(OrigProc, hWnd, uMsg, wParam, lParam)
    Call pGetWindowRectW(hWnd, m_wRect)
    m_hDC = GetWindowDC(hWnd)
    Call pFrameRect(m_hDC, 0, 0, m_wRect.Width, m_wRect.Height)
    Call ReleaseDC(hWnd, m_hDC)
End Function
Private Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim OrigProc As Long
    Dim ClassName As String
    If hWnd = 0 Then Exit Function
    OrigProc = GetProp(hWnd, "OrigProcAddr")
    If Not OrigProc = 0 Then
        If uMsg = WM_DESTROY Then
            SetWindowLong hWnd, GWL_WNDPROC, OrigProc
            WindowProc = CallWindowProc(OrigProc, hWnd, uMsg, wParam, lParam)
            RemoveProp hWnd, "OrigProcAddr"
        Else
            If uMsg = WM_PAINT Or WM_NCPAINT Then

WindowProc = OnPaint(OrigProc, hWnd, uMsg, wParam, lParam)
            Else
                WindowProc = CallWindowProc(OrigProc, hWnd, uMsg, wParam, lParam)
            End If
        End If
    Else
        WindowProc = DefWindowProc(hWnd, uMsg, wParam, lParam)
    End If
End Function

Private Function pGetWindowRectW(ByVal hWnd As Long, lpRectW As RECTW) As Long
    Dim TmpRect As RECT
    Dim Rtn     As Long
    Rtn = GetWindowRect(hWnd, TmpRect)
    With lpRectW
        .Left = TmpRect.Left
        .Top = TmpRect.Top
        .Right = TmpRect.Right
        .Bottom = TmpRect.Bottom
        .Width = TmpRect.Right - TmpRect.Left
        .Height = TmpRect.Bottom - TmpRect.Top
    End With
    pGetWindowRectW = Rtn
End Function

Private Function pFrameRect(ByVal hDC As Long, ByVal x As Long, y As Long, ByVal Width As Long, ByVal Height As Long) As Long
    Dim TmpRect     As RECT
    Dim m_hBrush    As Long
    With TmpRect
        .Left = x
        .Top = y
        .Right = x + Width
        .Bottom = y + Height
    End With
    m_hBrush = CreateSolidBrush(Color)
    pFrameRect = FrameRect(hDC, TmpRect, m_hBrush)
    DeleteObject m_hBrush
End Function

摘自:网络整理

相关文章参考:


※关于三个概念:ActiveX、OLE和COM

※注册ActiveX控件的几种方法(转) 分享※

※VB 单击ListView控件某列表头进行排序


控件关文章:


※VB表格控件总览与例程分析※

※VB 设置控件边框颜色(如:List、Text、Picture)※

※VB控件注册 - 利用资源文件将dll、ocx打包进exe文件

※做VB的,经常注册和反注册OCX控件和DLL链

※VB表格控件总览与例程分析

※根据窗体自动调整窗体内控件大小 注:实用,可以直接引用

※用户控件制作讲解与实例

VB制作OCX控件的步骤

※【引用】窗口处理技巧大全 vb(窗体控件)

※VB让控件可以当标题栏拖动

※VB 调用腾讯截图控件CameraDLL.dll

※VB表格控件总览与例程分析

※VB表格控件总览与例程分析

※☆Mp3Play.ocx控件让音乐之声响起来

※为系统加载右键注册控件选项【VB 注册控件】

※VB中MsFlexGrid控件的使用细则

※点击MSFlexGrid数据控件的标题进行数据排序


更多精彩>>>

VB 设置控件边框颜色(如:List、Text、Picture)相关推荐

  1. android控件字体,android 设置控件的颜色字体的方法

    1.用代码设置控件的颜色: int b =  getResources().getColor(R.drawable.blue);//得到配置文件里的颜色 mButton.setTextColor(b) ...

  2. Qt控件边框颜色设定

    border-left: 3px solid red; border-right: 3px solid red; border-top: 3px solid red; border-bottom: 3 ...

  3. Android设置控件背景颜色

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  4. VB表格控件总览与例程分析

    一.表格控件总览: 在VB开发环境中,表格控件在界面开发元素中占有重要的地位.它不仅有外观整洁.表达形式规范的优点,而且更重要的是它较高的信息表现率(就是相对于其他控件来说能够表达更多的信息),随着信 ...

  5. 为系统加载右键注册控件选项【VB 注册控件】

    做VB的,经常注册和反注册OCX控件和DLL链 但是,每次都要 "开始"--"运行" --"regsvr32 C:\********\******.o ...

  6. VB让控件可以当标题栏拖动

    '运用本段代码可以使任意控件像窗体标题栏一样具有拖动窗体的功能? '先在模块中加入以下代码: Public Declare Function ReleaseCapture Lib "user ...

  7. 【引用】窗口处理技巧大全 vb(窗体控件)

    Vb提供了API函数SetWindowLong和GetWindowLong,可以让我们很容易取得对窗口的操作:通过对窗口属性的操作,可以更改窗口的显示风格.有些看来是正常情况下无法实现的窗口,现在你可 ...

  8. 设置控件背景背景颜色为透明

    有时候,我们需要将控件的背景颜色设定为透明,比如说label(标签)控件.那么,如何将控件的背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答 ...

  9. MFC控件的颜色设置

    在绘制控件颜色时,控件会发送WM_CTLCOLOR消息给父窗口,父窗口收到消息后,映射到OnCtlColor()函数中处理. 该函数返回一个画刷用于设置子控件的背景颜色,子控件再执行自己的CtlCol ...

最新文章

  1. FusionCharts Free(3)
  2. 攻防世界-Misc-something_in_image(秒懂!!)
  3. python离线安装国内镜像OpenCV
  4. 通过GitHub Pages创建个人主页
  5. 用java写的常见排序
  6. 为ie和chrome FF单独设置样式的“条件注释法”、“类内属性前缀法”、“选择器前缀法”、实现方法 案例(推荐)
  7. qt连接mysql数据库原理_Qt连接数据库的两种方法
  8. Oracle中两个重要的语句
  9. pytorch torchvision.transforms.CenterCrop
  10. 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!
  11. .NET Oject And Json
  12. 小程序 富文本解析方式
  13. 广州“开四停四”交通限行,技术上是如何实现的?
  14. 专访当当网张亮:深度解读分布式作业调度框架elastic-job
  15. 全网最全——数字信号和模拟信号的区别
  16. 从远景论坛上学到的完美激活NERO8 NERO9的经验
  17. 广西一男子酒后肇事逃逸 致环卫工人被撞身亡(图)
  18. 电脑蓝屏怎么办 七大原因及解决办法来帮你
  19. uni-app设置页面背景及背景图片
  20. 网络工程师/计算机网络知识如何入门,以及学习路线?

热门文章

  1. 惊慌 Android!使用 3D 打印的头像可破解多款手机
  2. 2019 年的 Linux 会如何?
  3. 茅侃侃,80后技术人与你同在 | 一周业界事
  4. 手工制作机器人用彩泥_印度神奇芒果干制作过程,看一遍顶三遍,游客:不会再吃了...
  5. 字节跳动高工面试:mysql索引视频教程
  6. ClickHouse在字节跳动推荐和广告业务部门的最佳实践
  7. https抓包_浅谈HTTPS抓包原理,为什么Charles能够抓取HTTPS报文?
  8. php word 数学公式,如何在word中输入复杂的数学公式? 详细始末
  9. mysql 判断是数据类型_mysql数据类型判断
  10. linux僵尸进程理解,聊聊Linux系统中的僵尸进程