网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月02日漏签0天
vb吧 关注:156,084贴子:1,166,234
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 5回复贴,共1页
<<返回vb吧
>0< 加载中...

获得一个控件在整个屏幕的位置

  • 只看楼主
  • 收藏

  • 回复
  • 璐村惂鐢ㄦ埛_007J3Ae馃惥
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
感觉还是比较有些用处的,特别是在定位窗体的时候:)

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Private Sub Command1_Click()
Dim rct As RECT
GetWindowRect Text1.hwnd, rct
Me.Print rct.Left
Me.Print rct.Top
Me.Print rct.Bottom
Me.Print rct.Right
End Sub


  • cbm666
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
'添加 Text1 Command1 可得到与楼主完全一样的结果.

Dim xx1%,yy1%,xx2%,yy2%
Private Sub Command1_Click()
xx1 = IIf(Me.BorderStyle = 2, (Me.Left + Text1.Left + 60) \ 15, (Me.Left + Text1.Left) \ 15)
yy1 = IIf(Me.BorderStyle = 2, (Me.Top + Text1.Top + 345) \ 15, (Me.Top + Text1.Top) \ 15)
xx2 = IIf(Me.BorderStyle = 2, (Me.Left + Text1.Left + Text1.Width + 60) \ 15, (Me.Left + Text1.Left + Text1.Width) \ 15)
yy2 = IIf(Me.BorderStyle = 2, (Me.Top + Text1.Top + Text1.Height + 345) \ 15, (Me.Top + Text1.Top + Text1.Height) \ 15)
MsgBox xx1 & "," & yy1 & vbCrLf & xx2 & "," & yy2
End Sub


2025-09-02 10:34:06
广告
不感兴趣
开通SVIP免广告
  • 221.196.170.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
获得的位置不一样~~~


  • 我爱舞女泪
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1楼的只能用在有hWnd属性的控件
2楼的只能用窗体属性ScaleMode = [1 - Twip]时

只要是控件,都可以直接用以下这个代码
Option Explicit

Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Private Type POINTAPI
  X As Long
  Y As Long
End Type

Private Sub Command1_Click()
  DisplayControlPointAtScreen Label1
  DisplayControlPointAtScreen Line1
End Sub

Private Sub DisplayControlPointAtScreen(ctl As Control)
  Dim pt As POINTAPI
  With ctl
    If TypeOf ctl Is Line Then
      pt.X = ScaleX(IIf(.X1 > .X2, .X2, .X1), ScaleMode, vbPixels)
      pt.Y = ScaleY(IIf(.Y1 > .Y2, .Y2, .Y1), ScaleMode, vbPixels)
    Else
      pt.X = ScaleX(.Left, ScaleMode, vbPixels)
      pt.Y = ScaleY(.Top, ScaleMode, vbPixels)
    End If
  End With
  ClientToScreen hwnd, pt
  MsgBox "标签在屏幕上的位置是:(" & pt.X & "," & pt.Y & ")"
End Sub


  • 我爱舞女泪
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
给2楼的一点建议:你使用固定的边框值,不一定有效,因为在不同的操作系统下(如,在XP下或在非XP下但使用XP的主题风格时),窗体边框和标题栏的高度是不同的


  • cbm666
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢谢提醒, 这点我倒是没注意.

对我个人来说还好, 因我的软件 100% 都是没边匡的窗体, 我2F 代码是我

习掼用来抓取部份小区域图片使用的, 发这个帖只是多了Borderstyle的判断.


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 5回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示