Msimg32.cs 7.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Runtime.InteropServices;
  3. namespace Microsoft.Win32
  4. {
  5. /// <summary>
  6. /// Msimg32.dll
  7. /// </summary>
  8. public static partial class UnsafeNativeMethods
  9. {
  10. /// <summary>
  11. /// <para>功能:</para>
  12. /// <para>(Win2K和Win2K后请调用GdiAlphaBlend)该函数用来显示具有指定透明度的图像。</para>
  13. /// <para>.</para>
  14. /// <para>备注:</para>
  15. /// <para>如果源矩形区域与目标矩形区域大小不一样,那么将缩放源位图与目标矩形区域匹配。</para>
  16. /// <para>如果使用SetStretchBltMode函数,那么iStretchMode的值是BLACKONWHITE和WHITEONBLACK,在本函数中,iStretchMode的值自动转换成COLORONCOLOR。</para>
  17. /// <para>目标坐标使用为目标设备环境当前指定的转换方式进行转换。</para>
  18. /// <para>源坐标则使用为源设备环境指定的当前转换方式进行转换。</para>
  19. /// <para>如果源设备环境标识为增强型图元文件设备环境,那么会出错(并且该函数返回FALSE)。</para>
  20. /// <para>如果目标和源位图的色彩格式不同,那么AlphaBlend将源位图转换以匹配目标位图。</para>
  21. /// <para>AlphaBlend不支持镜像。如果源或目标区域的宽度或高度为负数,那么调用将失败。</para>
  22. /// </summary>
  23. /// <param name="hdcDest">指向目标设备环境的句柄。</param>
  24. /// <param name="xoriginDest">指定目标矩形区域左上角的X轴坐标,按逻辑单位。</param>
  25. /// <param name="yoriginDest">指定目标矩形区域左上角的Y轴坐标,按逻辑单位。</param>
  26. /// <param name="wDest">指定目标矩形区域的宽度,按逻辑单位。</param>
  27. /// <param name="hDest">指向目标矩形区域的高度,按逻辑单位。</param>
  28. /// <param name="hdcSrc">指向源设备环境的句柄。</param>
  29. /// <param name="xoriginSrc">指定源矩形区域左上角的X轴坐标,按逻辑单位。</param>
  30. /// <param name="yoriginSrc">指定源矩形区域左上角的Y轴坐标,按逻辑单位。</param>
  31. /// <param name="wSrc">指定源矩形区域的宽度,按逻辑单位。</param>
  32. /// <param name="hSrc">指定源矩形区域的高度,按逻辑单位。</param>
  33. /// <param name="ftn">指定用于源位图和目标位图使用的alpha混合功能,用于整个源位图的全局alpha值和格式信息。源和目标混合功能当前只限为AC_SRC_OVER。最后一个参数blendFunction是一个BLENDFUNCTION结构。BLENDFUNCTION结构控制源和目标位图的混合方式,它的BlendOp字段指明了源混合操作,但只支持AC_SRC_OVER,即根据源alpha值把源图像叠加到目标图像上。OpenGL的alpha混合还支持其他的方式,如常量颜色源。下一个字段BlendFlags必须是0,也是为以后的应用保留的。最后一个字段AlphaFormat有两个选择:0表示常量alpha值,AC_SRC_ALPHA表示每个像素有各自的alpha通道。</param>
  34. /// <returns>如果函数执行成功,那么返回值为TRUE;如果函数执行失败,那么返回值为FALSE。</returns>
  35. [DllImport("msimg32.dll", SetLastError = true)]
  36. [return: MarshalAs(UnmanagedType.Bool)]
  37. public static extern bool AlphaBlend(IntPtr hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, IntPtr hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, NativeMethods.BLENDFUNCTION ftn);
  38. /// <summary>
  39. /// <para>功能:</para>
  40. /// <para>(Win2K和Win2K后请调用GdiGradientFill)该函数填充矩形和三角形结构。</para>
  41. /// <para>.</para>
  42. /// <para>备注:</para>
  43. /// <para>若想在矩形区域中加入一些平滑的阴影(底纹),请用三角形的三个顶点调用GradientFill函数。CDI将进行线性插值,并填充矩形区域。</para>
  44. /// <para>在绘制矩形时可能使用两种阴影模式在水平模式中,矩形从左至右开始变暗,在垂直模式中则是从上至下进行。</para>
  45. /// </summary>
  46. /// <param name="hdc">指向目标设备环境的句柄。</param>
  47. /// <param name="pVertex">指向TRIVERTEX结构数组的指针,该数组中的每项定义了三角形顶点。</param>
  48. /// <param name="nVertex">顶点数目。</param>
  49. /// <param name="pMesh">三角形模式下的GRADIENT_TRIANGLE结构数组,或矩形模式下的GRADIENT_RECT结构数组。</param>
  50. /// <param name="nMesh">参数pMesh中的成员数目(这些成员是三角形或矩形)。</param>
  51. /// <param name="ulMode">指定倾斜填充模式。该参数可以包含下列值,这些值的含义为:</param>
  52. /// <returns>如果函数执行成功,那么返回值为TRUE;如果函数执行失败,则返回值为FALSE。</returns>
  53. [DllImport("msimg32.dll")]
  54. [return: MarshalAs(UnmanagedType.Bool)]
  55. public static extern bool GradientFill(IntPtr hdc, IntPtr pVertex, uint nVertex, IntPtr pMesh, uint nMesh, uint ulMode);
  56. /// <summary>
  57. /// <para>功能:</para>
  58. /// <para>(Win2K和Win2K后请调用GdiTransparentBlt)该函数对指定的源设备环境中的矩形区域像素的颜色数据进行位块(bit_block)转换,并将结果置于目标设备环境。</para>
  59. /// <para>.</para>
  60. /// <para>备注:</para>
  61. /// <para>函数TransparentBlt支持4位/像素和8位/像素格式的源位图,使用AlphaBlend可以指定带有透明度的32位/像素格式的位图。</para>
  62. /// <para>如果源和目标矩形的大小不一致,那么将对源位图进行拉伸以与目标矩形匹配,当使用SetStretchBltMode函数时,BLACKONWHITE和WHITEONBLACK两种iStretchMode模式将被转换成TransparentBlt函数的COLORONCOLOR模式。</para>
  63. /// <para>目标设备环境指定了用于目标坐标的变换类型,而源设备环境指定了源坐标使用的变换类型。</para>
  64. /// <para>如果源位图或目标位图的宽度或高度是负数,那么TransparentBlt函数也不对位图进行镜像。</para>
  65. /// </summary>
  66. /// <param name="hdcDest">指向目标设备环境的句柄。</param>
  67. /// <param name="xoriginDest">指定目标矩形区域左上角的X轴坐标,按逻辑单位。</param>
  68. /// <param name="yoriginDest">指定目标矩形区域左上角的Y轴坐标,按逻辑单位。</param>
  69. /// <param name="wDest">指定目标矩形区域的宽度,按逻辑单位。</param>
  70. /// <param name="hDest">指向目标矩形区域的高度,按逻辑单位。</param>
  71. /// <param name="hdcSrc">指向源设备环境的句柄。</param>
  72. /// <param name="xoriginSrc">指定源矩形区域左上角的X轴坐标,按逻辑单位。</param>
  73. /// <param name="yoriginSrc">指定源矩形区域左上角的Y轴坐标,按逻辑单位。</param>
  74. /// <param name="wSrc">指定源矩形区域的宽度,按逻辑单位。</param>
  75. /// <param name="hSrc">指定源矩形区域的高度,按逻辑单位。</param>
  76. /// <param name="crTransparent">源位图中的RGB值当作透明颜色。</param>
  77. /// <returns>返回值:如果函数执行成功,那么返回值为TRUE;如果函数执行失败,那么返回值为FALSE。</returns>
  78. [DllImport("msimg32.dll")]
  79. [return: MarshalAs(UnmanagedType.Bool)]
  80. public static extern bool TransparentBlt(IntPtr hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, IntPtr hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, uint crTransparent);
  81. }
  82. }