不需要GDI+,是直接用GDI,画扇形,其实,就是API,画圆形,加参数,就能画扇形,半透明,用其它方法可以实现

解决方案 »

  1.   

    Public Sub 画圆(hDc As Long, ByVal 圆心X As Long, ByVal 圆心Y As Long, ByVal 宽度 As Long, ByVal 高度 As Long, _
               ByVal 度起点 As Long, ByVal 度终点 As Long, ByVal 框线粗细 As Long, ByVal 线条类型 As 线条类型_m, ByVal 边框色 As Long, ByVal 填充色 As Long)
    Dim pBrush As Long, pPen As Long
    Dim X1 As Long, X2 As Long, X3 As Long, x4 As Long
    Dim Y1 As Long, Y2 As Long, Y3 As Long, y4 As Long
    Dim A As SingleX1 = 圆心X - 宽度 / 2
    X2 = 圆心X + 宽度 / 2Y1 = 圆心Y - 高度 / 2
    Y2 = 圆心Y + 高度 / 2A = 3.14159265 / 180  '为了将角度转换为弧度
    X3 = 圆心X + (宽度 * Sin(度起点 * A))
    Y3 = 圆心Y - (高度 * Cos(度起点 * A))x4 = 圆心X + (宽度 * Sin(度终点 * A))
    y4 = 圆心Y - (高度 * Cos(度终点 * A))pBrush = SelectObject(hDc, CreateSolidBrush(填充色))
    pPen = SelectObject(hDc, CreatePen(线条类型, 框线粗细, 边框色))If 填充色 < 0 Then
    Call Arc(hDc, X1, Y1, X2, Y2, X3, Y3, x4, y4)
    Else
    Call Pie(hDc, X1, Y1, X2, Y2, X3, Y3, x4, y4)
    End If
    Call DeleteObject(SelectObject(hDc, pBrush))
    Call DeleteObject(SelectObject(hDc, pPen))
    End Sub
      

  2.   

    半透明,可以先将扇形画到,P2,然后用
    Public Function 半透明复制图2(ByVal 目标DC As Long, ByVal x目标 As Long, ByVal y目标 As Long, ByVal w目标 As Long, ByVal h目标 As Long, ByVal 源DC As Long, ByVal x源 As Long, ByVal y源 As Long, ByVal w源 As Long, ByVal h源 As Long, ByVal 透明度百分比 As Long) As Long
      Dim lngBlend As Long
      'lngBlend = Val("&h" & Hex(透明度) & "00" & "00")
      lngBlend = RGB(0, 0, 255 - 2.55 * 透明度百分比)
      AlphaBlending 目标DC, x目标, y目标, w目标, h目标, 源DC, x源, y源, w源, h源, lngBlend
    End FunctionP2 半透明复制到P1显示就可以了, Picture1 是显示用,Picture2隐藏
      

  3.   

    研究了一下,搞定了。
    把图片保存下来,修改后缀为ZIP即可解压看到工程文件。
      

  4.   

    我奉劝这位仁兄凡是涉及到带alpha通道的半透明图形绘制还是早日放弃GDI,改用GDI+吧……
      

  5.   

    再次感谢楼上的,我仔细阅读了你的程序,你的扇形声明函数Public Declare Function GdipDrawPieI Lib "gdiplus" (ByVal Graphics As Long, ByVal pen As Long, ByVal x As Long, ByVal y As Long, ByVal Width As Long, ByVal Height As Long, ByVal startAngle As Single, ByVal sweepAngle As Single) As GpStatus
    我的自己瞎拼凑的扇形声明函数'Public Declare Function GdipDrawPie Lib "gdiplus" (ByVal Graphics As Long, ByVal pen As Long, ByVal x As Single, ByVal y As Single, ByVal Width As Single, ByVal Height As Single, ByVal X3 As Long, ByVal Y3 As Long) As GpStatus

    问题出在形参名称和类型都对不上。
    为了避免我这种瞎猫碰死耗子的瞎折腾。
    敢问兄台,能不能发给我一份详细的VB6.0下的GDI+ 各种函数声明清单呢,最好附上具体的使用方法,像datasheet一样,那将感激不尽啊!
      

  6.   


    你让我说你什么好……
    在你的最初的帖子中(http://bbs.csdn.net/topics/390534623),7楼的Veron_04已经给出GDI+相关的详细资料了,你就不能稍微动动脑筋自己思考研究一下么!包括我在此帖中扇形的画法也是参考了他的资料。
    如果让我给你GDI+的学习资料,那么我的回答和Veron_04是一样的!
      

  7.   

    我奉劝这位仁兄凡是涉及到带alpha通道的半透明图形绘制还是早日放弃GDI,改用GDI+吧……这位仁兄,你不知道GDI+,慢的要命啊,我I7+GT660显卡,用GDI+ 画软件介面,要化1秒或者以上,
    后来,只能混合GDI,加上缓冲,让软件运行来流畅。如果要做游戏的话,那就是个悲剧。
    而GDI非常快。
      

  8.   

    我奉劝这位仁兄凡是涉及到带alpha通道的半透明图形绘制还是早日放弃GDI,改用GDI+吧……这位仁兄,你不知道GDI+,慢的要命啊,我I7+GT660显卡,用GDI+ 画软件介面,要化1秒或者以上,
    后来,只能混合GDI,加上缓冲,让软件运行来流畅。如果要做游戏的话,那就是个悲剧。
    而GDI非常快。做游戏的话就用更高级的direct或者OPENGL,一般的用户UI可以用GDI+
      

  9.   

    这个里面的文件“GDIPlus API.bas”就是你要的东东:
    VBtray系统托盘图标动态绘制VB源码
    http://download.csdn.net/detail/zhao4zhong1/570264