一般的图片编辑软件中调整图片尺寸时均由周围的8个控制句柄来调节大小。问题是:如Excel中的图片在调整边框时周围8个控制句柄是圆形的,而非矩形,如何实现呢?并且要求有鼠标移动等事件,且要在图片框的最上层,不能被图片框遮挡。采用Shape控件没有事件,而Image控件又在Picture下层,且没有hWnd。
如何实现一个透明的图片框,且有hWnd????

解决方案 »

  1.   

    用shape,事件应该用picturebox的事件。。
      

  2.   

    我写过类似的,用的是PictureBox要改变形状,就用SetWindowRgn
      

  3.   

    各位星星,能不能贴点代码呀!请问pigpag,SetWindowRgn怎么做?
      

  4.   

    完全实现靠你自己了。我以前写过这种东西的,给你点经验吧(源码找不到了)1. 做一个控件ctlResizer,专门用于构建一个大小改变器。将这个控件背景设为透明,然后放上8个PictureBox,美化一下。然后要注意封装,将各个小手柄的拖动转换成Resize事件激发出去,而不要让调用者去分析PictureBox的事件。2. 关于PictureBox的形状设置,给一小段示例。在窗体上放一个Picture1,然后运行这个:
    Option Explicit
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPrivate Sub Form_Load()
        Dim hRgn As Long
        
        With Picture1
            .BorderStyle = 0
            .BackColor = vbRed
            .Move 0, 0, 450, 450
            
            hRgn = CreateEllipticRgn(0, 0, 30, 30)
            SetWindowRgn .hWnd, hRgn, True
            DeleteObject hRgn
        End With
    End Sub