当鼠标移到下一个控件时,前一个控件边框周围所画矩形被清除。Private Declare Function GetCursorPos Lib "USER32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "USER32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetWindowRect Lib "USER32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetDC Lib "USER32" (ByVal hwnd As Long) As Long
Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "GDI32" (ByVal hObject As Long) As Long
Private Declare Function ReleaseDC Lib "USER32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
Private Declare Function CreatePen Lib "GDI32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function MoveToEx Lib "GDI32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "GDI32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Private Type POINTAPI
    X1 As Long
    y1 As Long
End Type
Dim sX, sY, X, Y As IntegerPrivate Sub Command1_Click()
 Timer1.Interval = 200
 Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Dim hwnd As Long
Dim pt As POINTAPI
Dim lRect As RECT
Dim a As Long, TemphPen As Long, OldhPen As Long
GetCursorPos pt '取得鼠标坐标信息
hwnd = WindowFromPoint(pt.X1, pt.y1)
Call GetWindowRect(hwnd, lRect)
 sX = lRect.Left - 1
 sY = lRect.Top - 1
 X = lRect.Right + 1
 Y = lRect.Bottom + 1
 a = GetDC(0)
          TemphPen = CreatePen(PS_SOLID, 5, &HFF&)
          OldhPen = SelectObject(a, TemphPen)
          MoveToEx a, sX, sY, pt
          LineTo a, X, sY
          MoveToEx a, X, sY, pt
          LineTo a, X, Y
          MoveToEx a, X, Y, pt
          LineTo a, sX, Y
          MoveToEx a, sX, Y, pt
          LineTo a, sX, sY
    SelectObject a, OldhPen
    DeleteObject TemphPen
    ReleaseDC 0, a
End Sub

解决方案 »

  1.   

    api SetROP2 可以实现橡皮擦的功能
      

  2.   

    用API太复杂了吧。
    为什么不用
    Private Sub Command1_Click()
        Form1.Line (Label1.Left, Label1.Top)-(Label1.Left + Label1.Width, Label1.Top + Label1.Height), , B
    End SubPrivate Sub Command2_Click()
        Form1.Cls
    End Sub呢?
    一个Label1,两个按钮Command1和Command2
      

  3.   

    捕获MouseIn事件,使用SetFocus即可。