本帖最后由 rolaka 于 2010-8-24 16:46 编辑 Func SetBitmap($hGUI, $hImage, $iOpacity)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
;调用GetDC 返回一个桌面的dc句柄
$hScrDC = _WinAPI_GetDC(0)
;获取一个与窗口对应dc句柄
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
;获取一个png文件的位图句柄
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
;选择/保存 $hBitmap为使用在$hMemDC上的对象
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
;创建两个用于传参的Struct结构 ($tagSIZE与$tSIZE)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
;设置参数
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", $iOpacity)
DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
;更新$hGUI 相当于绘图操作
_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
;释放ReleaseDC句柄
_WinAPI_ReleaseDC(0, $hScrDC)
;恢复_WinAPI_SelectObject($hMemDC, $hBitmap)的修改
_WinAPI_SelectObject($hMemDC, $hOld)
;删除$hBitmap句柄
_WinAPI_DeleteObject($hBitmap)
;删除$hMemDC句柄
_WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetBitmap
msdn上资料有点少 参照了http://support.microsoft.com/kb/77060/en-us/的官方介绍
通过dc内存缓冲区来绘图 大概就这么个意思
如果有错误希望能够指证...
如果lz觉得你的问题解决了 就请实现你的诺言 要你换mj我也没办法 我只能告诉你自重 |