Private Declare Function PtInRect Lib "user32" (lpRect As RECT, pt As POINTAPI) As Long
API浏览器里这个声明是错误的
给你写了个示例代码,窗体只放一个TIMER即可 Private Type POINTAPI x As Long y As Long End Type Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long 'API浏览器那里面的那个声明是错误的 Private Sub Form_Load() Timer1.Interval = 100 End SubPrivate Sub Timer1_Timer() Dim M As POINTAPI GetCursorPos M Dim R As RECT GetWindowRect Me.hwnd, R If PtInRect(R, M.x, M.y) <> 0 Then Me.Caption = "鼠标在窗体内" Else Me.Caption = "鼠标在窗体外" End If End Sub
Private Type POINTAPI X As Long Y As Long End Type Private Type DIAMOND X As Long '起始x坐标 Y As Long '起始y坐标 CX As Long '中点 CY As Long '中点 W As Long '宽度 H As Long '高度 mX As Long '位移x mY As Long '位移y End TypePrivate Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, ByVal X As Long, ByVal Y As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Dim rDmd As DIAMONDPrivate Sub Form_Load() Me.ScaleMode = 3 '初始化 With rDmd .X = 0 .Y = 0 .CX = 32 .CY = 16 .H = 32 .W = 64 .mX = 51 .mY = 18 End With End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim SP(4) As POINTAPI Dim hRgn As Long, hIn As Long, hBrush As Long '设置菱形数据 With rDmd '左点 SP(0).X = .mX SP(0).Y = .mY + .CY '顶点 SP(1).X = .mX + .CX SP(1).Y = .mY '右点 SP(2).X = .mX + .W SP(2).Y = .mY + .CY '底点 SP(3).X = .mX + .CX SP(3).Y = .mY + .H '合并到左点 SP(4) = SP(0) End With '创建菱形范围 hRgn = CreatePolygonRgn(SP(0), 4, 1)' '画菱形,视觉测试--------------------------------- hBrush = CreateSolidBrush(RGB(100, 0, 0)) If hRgn Then Call FillRgn(Me.hdc, hRgn, hBrush) DeleteObject hBrush End If '判断鼠标是否在菱形内 hIn = PtInRegion(hRgn, X, Y) If hIn <> 0 Then Me.Caption = "鼠标在菱形内" Else Me.Caption = "鼠标在菱形外" End If '删除对象 DeleteObject hRgn DeleteObject hIn End Sub
PtInRxgxxx 点在区域内
ptinxxx 系列
http://blog.csdn.net/SupermanKing/archive/2010/04/28/5538059.aspx
请问具体是那个函数名??
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long 'API浏览器那里面的那个声明是错误的
Private Sub Form_Load()
Timer1.Interval = 100
End SubPrivate Sub Timer1_Timer()
Dim M As POINTAPI
GetCursorPos M
Dim R As RECT
GetWindowRect Me.hwnd, R
If PtInRect(R, M.x, M.y) <> 0 Then
Me.Caption = "鼠标在窗体内"
Else
Me.Caption = "鼠标在窗体外"
End If
End Sub
http://hi.baidu.com/hnsoft/blog/item/bcd48a6451333df8f73654d9.html
X As Long
Y As Long
End Type
Private Type DIAMOND
X As Long '起始x坐标
Y As Long '起始y坐标
CX As Long '中点
CY As Long '中点
W As Long '宽度
H As Long '高度
mX As Long '位移x
mY As Long '位移y
End TypePrivate Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Dim rDmd As DIAMONDPrivate Sub Form_Load()
Me.ScaleMode = 3
'初始化
With rDmd
.X = 0
.Y = 0
.CX = 32
.CY = 16
.H = 32
.W = 64
.mX = 51
.mY = 18
End With
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim SP(4) As POINTAPI
Dim hRgn As Long, hIn As Long, hBrush As Long
'设置菱形数据
With rDmd
'左点
SP(0).X = .mX
SP(0).Y = .mY + .CY
'顶点
SP(1).X = .mX + .CX
SP(1).Y = .mY
'右点
SP(2).X = .mX + .W
SP(2).Y = .mY + .CY
'底点
SP(3).X = .mX + .CX
SP(3).Y = .mY + .H
'合并到左点
SP(4) = SP(0)
End With
'创建菱形范围
hRgn = CreatePolygonRgn(SP(0), 4, 1)' '画菱形,视觉测试---------------------------------
hBrush = CreateSolidBrush(RGB(100, 0, 0))
If hRgn Then
Call FillRgn(Me.hdc, hRgn, hBrush)
DeleteObject hBrush
End If '判断鼠标是否在菱形内
hIn = PtInRegion(hRgn, X, Y)
If hIn <> 0 Then
Me.Caption = "鼠标在菱形内"
Else
Me.Caption = "鼠标在菱形外"
End If
'删除对象
DeleteObject hRgn
DeleteObject hIn
End Sub
'左点
SP(0).X = 200 '.mX
SP(0).Y = 200 '.mY + .CY
'顶点
SP(1).X = 100 '.mX + .CX
SP(1).Y = 100 '.mY
'右点
SP(2).X = 320 '.mX + .W
SP(2).Y = 320 '.mY + .CY
'底点
SP(3).X = 600 '.mX + .CX
SP(3).Y = 600 '.mY + .H直接设置这个问什么画得看不到??