讨论一下control.PointToClient的性能问题好吗?

pslh 2006-04-09 02:03:43
用.net reflector工具查看了一下control.PointToClient,发现:

Public Function PointToClient(ByVal p As Point) As Point
Return Me.PointToClientInternal(p)
End Function

再查Me.PointToClientInternal :

Friend Function PointToClientInternal(ByVal p As Point) As Point
Dim point1 As New POINT(p.X, p.Y)
UnsafeNativeMethods.MapWindowPoints(NativeMethods.NullHandleRef, New HandleRef(Me, Me.Handle), point1, 1)
Return New Point(point1.x, point1.y)
End Function

此时,发现一个问题,在PointToClientInternal过程中:第一行定义的point1 其实就是参数p ,第三行返回的值其实也是参数p (只不过值改变了)。他们为什么要多New两次呢,这样做会不会影响性能呢?不如改为下面的好:
Friend Function PointToClientInternal(ByVal p As Point) As Point
UnsafeNativeMethods.MapWindowPoints(NativeMethods.NullHandleRef, New HandleRef(Me, Me.Handle), p, 1)
Return p
End Function

大家认为如何呢?

因为在我的程序中有一个Hook,用来监控鼠标的move,在每一次move中,都要进入一个循环,在循环中要反复判断control.PointToClient的值,所以对此比较关心一点,大家不要笑我。
...全文
172 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pslh 2006-04-09
  • 打赏
  • 举报
回复
是不是不给分大家就不肯帮忙的呀?
pslh 2006-04-09
  • 打赏
  • 举报
回复
我想直接调用API:MapWindowPoints,可是下面的方面不行
<DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)> _
Public Shared Function MapWindowPoints(ByVal hWndFrom As Integer, ByVal hWndTo As Integer, ByRef pt As Drawing.Point, ByVal cPoints As Integer) As Integer
End Function

dim p as point = System.Windows.Forms.Control.MousePosition
MapWindowPoints(0, me.label.Handle, p, 1)
此时得到的p的值不正确,不知道错在了哪里,请高手指教一下好吗?

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧