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
这个函数可为一幅图象可绘画操作应用各式各样的效果
参数说明:
hDC:Long要在其中会图的设备场景
hBrush:long如状态为DSS_MONO,则指定一个刷子句柄
lpDrawStateProc:long指向一个函数地址的指针。
lParam:long 由图像的类型决定
wParam:long 由图像的类型决定
n1,图像的水平位置
n2,图像的垂直位置
n3,图象宽度

解决方案 »

  1.   

    wgku 你贴的是VB的声明啊,我以前还是VB的版主呢,我想知道怎么使用,我用了一点效果都没有? 连图像都出不来:(还有,那个回调函数是干吗的?
      

  2.   

    我还能找到更详细的,谢谢你提醒Long,TRUE(非零)表示成功,FALSE表示失败hDC ------------  Long,要在其中绘图的设备场景  hBrush ---------  Long,如状态为DSS_MONO(在un参数中设定),则指定一个刷子句柄  lpDrawStateProc -  Long,指向一个函数地址的指针。如图象类型为DST_COMPLEX,必须设置这个参数。对于DST_TEXT,则可设可不设  lParam ---------  Long,由图象的类型决定  wParam ---------  Long,由图象的类型决定  n1 -------------  Long,图象的水平位置  n2 -------------  Long,图象的垂直位置  n3 -------------  Long,图象的宽度。如图象类型为DST_COMPLEX,必须设置这个参数。而对于其他类型,则可以设为零。如为零,表示该参数在图象的基础上计算  n4 -------------  Long,图象的高度。如图象类型为DST_COMPLEX,必须设置这个参数。而对于其他类型,则可以设为零。如为零,表示该参数在图象的基础上计算  un -------------  Long,图象类型和状态的一个组合。参见下表
      图象类型
      DST_BITMAP
      lParam中的句柄
      DST_COMPLEX
      绘图在由lpDrawStateProc参数指定的回调函数期间执行。lParam和wParam会传递给回调事件
      DST_ICON
      lParam包括图标句柄
      DST_TEXT
      lParam代表文字的地址(可使用一个字串别名),wParam代表字串的长度
      DST_PREFIXTEXT
      与DST_TEXT类似,只是 &
      字符指出为下各字符加上下划线
      图象状态常数
      DSS_NORMAL
      普通图象
      DSS_UNION
      图象进行抖动处理
      DSS_DISABLED
      图象具有浮雕效果
      DSS_MONO
      用hBrush描绘图象
      DSS_RIGHT
      手册未正式说明——经实验证明没有什么作用(原文:Undocumented-experimentation
      seems to show no effect.)windows95用它获得我们应用于图象的一些视觉效果;例如,可使位图或其他图象在视觉上进入禁用或抖动状态。对于位图和图标,它在描绘位图或图标的时候应用一种效果。对于文本,既可让函数画出文本,也可在一个回调函数中执行自己的绘图操作。对于复杂的(用户自定义)图象,则必须用一个回调函数。在回调函数执行过程中,用自己的代码将自己希望的任何东西画入设备场景。在这之后,利用DrawState函数应用希望的效果
      

  3.   

    执行了 一点效果都没有!! win98下!
      

  4.   

    抖动算法早就被我解决了:
    http://www.csdn.net/expert/topic/486/486765.xml?temp=.6831781
      

  5.   

    最经写了一个抖动算法大全:
    http://go6.163.com/910grtd/vb/wdzp/ddsfdq.htm
      

  6.   

    zyl910:
    你的算法并不能正确的抖动,因为你从PictureBox取得的颜色信息本来就是不对的(在16bit色下),不信你可以使用一些特殊的16M色图片在显卡的16bit色下显示以下,你的方法并不能正确解决。不信你可以下载我的测试图片看看: http://www.guozi.com/files/msn_bmp.zip
      

  7.   

    对于DIB,我正在研究,还不太懂。应该可以这样做:把图片读取到DIB,然后在DIB中进行抖动运算,最后再输出到屏幕。只不过我有种不详的预感:“最后再输出到屏幕”的时候,系统会不会再进行一次抖动运算?如果会的话,那结果有可能比较糟糕。
    因为已经经过抖动运算的图片再进行一次抖动运算,结果可能比较糟糕。