改变PictureBox的ScaleLeft和ScaleTop后,用VB的画图函数和API的画图函数画出的图形不在同一位置

xue780616 2003-09-13 07:46:28
改变PictureBox的ScaleLeft和ScaleTop后,用VB的画图函数和API的画图函数画出的图形不在同一位置。
例如用PictureBox的line方法画出的矩形,与用API函数Rectangle画出的矩形,虽然给的坐标相同,但是却不能够重叠在一起。
如果ScaleLeft和ScaleTop都是0,就可以重叠在一起,如果改变了ScaleLeft和ScaleTop,API画图函数总是把控件的左上角当作左边原点,实际上改变了ScaleLeft和ScaleTop,坐标原点已经不在哪里了。
我用SetWindowOrgEx来设置坐标原点,发现没有效果,不知为什么?我到底该怎么做?
请大家指点!
非常感谢!
...全文
185 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodname008 2003-09-15
  • 打赏
  • 举报
回复
15缇是一个像素.
xue780616 2003-09-15
  • 打赏
  • 举报
回复
非常感谢答复。
我不知道为什么要px1 = (x1 - Picture1.ScaleLeft) / 15
15是怎么来的?
thirdapple 2003-09-13
  • 打赏
  • 举报
回复
应该的,API使用的Pixel坐标系统,VB使用的自定义坐标系统,能够重合吗?
好象有个API函数可以改变API的坐标系统,我现在在学校没办法翻出来给你了。
goodname008 2003-09-13
  • 打赏
  • 举报
回复
Option Explicit
Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long

Private Sub Command1_Click()
' x1,y1,x2,y2分别是在 Picture1 中的坐标
' px1,py1,px2,py2分别是 Picture1 中的坐标转换为 Rectangle 函数可正确画出矩形位置的坐标
Dim x1 As Long, y1 As Long, x2 As Long, y2 As Long
Dim px1 As Long, py1 As Long, px2 As Long, py2 As Long
x1 = 100
y1 = 100
x2 = 300
y2 = 300

px1 = (x1 - Picture1.ScaleLeft) / 15
py1 = (y1 - Picture1.ScaleTop) / 15
px2 = (x2 - Picture1.ScaleLeft) / 15
py2 = (y2 - Picture1.ScaleTop) / 15

Rectangle Picture1.hdc, px1, py1, px2, py2
Picture1.Line (x1, y1)-(x2, y2)
End Sub

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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