9 个解决方案
#1
hdc的值与长宽无关。。。
#2
那我返回的怎么都只在一倍大小处呢?
#3
其他参数的问题,把关键代码发上来看看
#4
jf
#5
Dim x0, y0, xnow, ynow, radius0, radius As Single
Private Sub Pic0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
x0 = X: y0 = Y: xnow = X: ynow = Y: Pic0.DrawMode = 6
End If
End Sub
Private Sub Pic0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(xnow) + 0.5, Fix(ynow) + 0.5
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Pic0.Refresh
xnow = X: ynow = Y
End If
End Sub
Private Sub Pic0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Dim Temp!
If x0 > X Then Temp = x0: x0 = X: X = Temp
If y0 > Y Then Temp = y0: y0 = Y: Y = Temp
Ellipse PicImage.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Ellipse PicMask.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
End If
End Sub
Private Sub Pic0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
x0 = X: y0 = Y: xnow = X: ynow = Y: Pic0.DrawMode = 6
End If
End Sub
Private Sub Pic0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(xnow) + 0.5, Fix(ynow) + 0.5
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Pic0.Refresh
xnow = X: ynow = Y
End If
End Sub
Private Sub Pic0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Dim Temp!
If x0 > X Then Temp = x0: x0 = X: X = Temp
If y0 > Y Then Temp = y0: y0 = Y: Y = Temp
Ellipse PicImage.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Ellipse PicMask.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
End If
End Sub
#6
HDC是指向PICTURE这个控件的场景的一个指针,很多API就可以通过这个HDC来找到要绘图的地方,但是这个PICTURE到底有多大,和HDC并没有什么关系,HDC它只是一个指针而已。
打个比方,你问我人民广场在哪里,我说在南京路和*路交界,你只要走到这个地方就可以找到人民广场,但是人民广场有多大,有多少人,那是另外一个问题,和他的位置在哪里是无关的。
楼主明白了么
打个比方,你问我人民广场在哪里,我说在南京路和*路交界,你只要走到这个地方就可以找到人民广场,但是人民广场有多大,有多少人,那是另外一个问题,和他的位置在哪里是无关的。
楼主明白了么
#7
明白了,可是有什么办法可以解决我所遇到的问题吗?我的图片框在一倍的时候定义的为像素坐标,但是到了两倍,三倍之后我定义为用户自定义坐标,以使得我的图片框里的坐标可以在各种大小时都是相同的值,那样我切换的时候就不需要改变图片框里的坐标值的大小。可是我在用API函数调用时候指出现在一倍大小的地方。如果我在两倍三倍的时候画也是这样。一旦鼠标释放之后他又会在当前的图片框上显示出来。这个问题能不能解决呢?????
#8
你在piucturebox改变大小时再次GetDC(PictureBox.hwnd)看看
#9
不行啊,我是这么写的Ellipse GetDC(PictureBox.hwnd), Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5 可是还是不行,本来原来还在一倍时候出现呢,现在就什么也不出现了,是我写的是错误的吗?高手指教啊 !!!!!!!!!!
#1
hdc的值与长宽无关。。。
#2
那我返回的怎么都只在一倍大小处呢?
#3
其他参数的问题,把关键代码发上来看看
#4
jf
#5
Dim x0, y0, xnow, ynow, radius0, radius As Single
Private Sub Pic0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
x0 = X: y0 = Y: xnow = X: ynow = Y: Pic0.DrawMode = 6
End If
End Sub
Private Sub Pic0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(xnow) + 0.5, Fix(ynow) + 0.5
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Pic0.Refresh
xnow = X: ynow = Y
End If
End Sub
Private Sub Pic0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Dim Temp!
If x0 > X Then Temp = x0: x0 = X: X = Temp
If y0 > Y Then Temp = y0: y0 = Y: Y = Temp
Ellipse PicImage.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Ellipse PicMask.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
End If
End Sub
Private Sub Pic0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
x0 = X: y0 = Y: xnow = X: ynow = Y: Pic0.DrawMode = 6
End If
End Sub
Private Sub Pic0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(xnow) + 0.5, Fix(ynow) + 0.5
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Pic0.Refresh
xnow = X: ynow = Y
End If
End Sub
Private Sub Pic0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If yuan Then
Ellipse Pic0.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Dim Temp!
If x0 > X Then Temp = x0: x0 = X: X = Temp
If y0 > Y Then Temp = y0: y0 = Y: Y = Temp
Ellipse PicImage.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
Ellipse PicMask.hdc, Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5
End If
End Sub
#6
HDC是指向PICTURE这个控件的场景的一个指针,很多API就可以通过这个HDC来找到要绘图的地方,但是这个PICTURE到底有多大,和HDC并没有什么关系,HDC它只是一个指针而已。
打个比方,你问我人民广场在哪里,我说在南京路和*路交界,你只要走到这个地方就可以找到人民广场,但是人民广场有多大,有多少人,那是另外一个问题,和他的位置在哪里是无关的。
楼主明白了么
打个比方,你问我人民广场在哪里,我说在南京路和*路交界,你只要走到这个地方就可以找到人民广场,但是人民广场有多大,有多少人,那是另外一个问题,和他的位置在哪里是无关的。
楼主明白了么
#7
明白了,可是有什么办法可以解决我所遇到的问题吗?我的图片框在一倍的时候定义的为像素坐标,但是到了两倍,三倍之后我定义为用户自定义坐标,以使得我的图片框里的坐标可以在各种大小时都是相同的值,那样我切换的时候就不需要改变图片框里的坐标值的大小。可是我在用API函数调用时候指出现在一倍大小的地方。如果我在两倍三倍的时候画也是这样。一旦鼠标释放之后他又会在当前的图片框上显示出来。这个问题能不能解决呢?????
#8
你在piucturebox改变大小时再次GetDC(PictureBox.hwnd)看看
#9
不行啊,我是这么写的Ellipse GetDC(PictureBox.hwnd), Fix(x0) + 0.5, Fix(y0) + 0.5, Fix(X) + 0.5, Fix(Y) + 0.5 可是还是不行,本来原来还在一倍时候出现呢,现在就什么也不出现了,是我写的是错误的吗?高手指教啊 !!!!!!!!!!