VB的图片框picturebox的句柄HDC在我改变其大小时为什么还是指向原始大小位置上去?

时间:2022-07-09 10:21:23
例如:我在图片框上画一个椭圆,在图片框为原来大小的2倍或是3倍的时候图片框的hdc还是指向1倍大小的时候。

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

#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

#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 可是还是不行,本来原来还在一倍时候出现呢,现在就什么也不出现了,是我写的是错误的吗?高手指教啊 !!!!!!!!!!