我的ICON在程序运行时由用户添加,我是存在StdPicture对像,最多可以有50个,如何使用API画出ICON的Normal,Selected,Disabled,Cut状态如果网上有原代码,请推荐一些,谢啦。

解决方案 »

  1.   

    其中,Normal和Disabled可以用GDI函数DrawState来绘制,其他的状态没有标准,由你自己决定。
      

  2.   

    Selected我要的效果是那种好像看起来有些格子在上面的那种,或都加一层薄薄的蓝色也行,而Cut是变得有点透明的那种
      

  3.   

    先用 DrawState 画上,然后再按要求自己画,用 AlphaBlend 函数。Private Declare Function DrawState Lib "user32" Alias "DrawStateA" ( _
        ByVal hdc As Long, _
        ByVal hBrush As Long, _
        ByVal lpDrawStateProc As Long, _
        ByVal lParam As Long, _
        ByVal wParam As Long, _
        ByVal n1 As Long, _
        ByVal n2 As Long, _
        ByVal n3 As Long, _
        ByVal n4 As Long, _
        ByVal un As Long) _
    As Long
    Private Const DST_COMPLEX = &H0                      '绘图在由lpDrawStateProc参数指定的回调函数期间执行,lParam和wParam会传递给回调事件
    Private Const DST_TEXT = &H1                         'lParam代表文字的地址(可使用一个字串别名),wParam代表字串的长度
    Private Const DST_PREFIXTEXT = &H2                   '与DST_TEXT类似,只是 & 字符指出为下各字符加上下划线
    Private Const DST_ICON = &H3                         'lParam包括图标的句柄
    Private Const DST_BITMAP = &H4                       'lParam包括位图的句柄
    Private Const DSS_NORMAL = &H0                       '普通图像
    Private Const DSS_UNION = &H10                       '图像进行抖动处理
    Private Const DSS_DISABLED = &H20                    '图象具有浮雕效果
    Private Const DSS_MONO = &H80                        '用hBrush描绘图像
    Private Const DSS_RIGHT = &H8000                     '无任何作用Private Declare Function AlphaBlend Lib "msimg32" ( _
        ByVal hDestDC As Long, _
        ByVal nXOriginDest As Long, _
        ByVal nYOriginDest As Long, _
        ByVal nWidthDest As Long, _
        ByVal hHeightDest As Long, _
        ByVal hSrcDC As Long, _
        ByVal nXOriginSrc As Long, _
        ByVal nYOriginSrc As Long, _
        ByVal nWidthSrc As Long, _
        ByVal nHeightSrc As Long, _
        ByVal pblend As Long) _
    As Boolean
    Private Type BLENDFUNCTION
        BlendOp As Byte
        BlendFlags As Byte
        SourceConstantAlpha As Byte
        AlphaFormat As Byte
    End Type
    Private Const AC_SRC_ALPHA = &H1
    Private Const AC_SRC_OVER = &H0