SetBitmap这个函数该如何理解?函数已经列出!(已解决)
本帖最后由 yiruirui 于 2010-8-30 09:13 编辑http://www.autoitx.com/forum.php?mod=viewthread&tid=13262&highlight=%CD%B8%C3%F7
这个里面的内容相信大家应该都看过,小弟也下载了源代码,但是里面有个函数看不太懂,在此把问题提出来,希望能理解的高手们帮帮小弟和一些不知道的人吧!
Func SetBitmap($hGUI, $hImage, $iOpacity)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$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)
_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_ReleaseDC(0, $hScrDC)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetBitmap
字面意思是设置图片,调用形式如下(大家看看源代码,里面有的):
Case 0 ;如果没有按下按钮
If $LabelArray[$i] <> 1 Then
$LabelArray[$i] = 1 ;状态 = over
SetBitmap($GUI, $Over[$i], 255)
EndIf
Case 1 ;如果按下按钮
If $LabelArray[$i] <> 2 Then
$LabelArray[$i] = 2 ;状态 = pressed
SetBitmap($GUI, $Pressed[$i], 255)
EndIf
好了,求高手的分析,多谢! 本帖最后由 yiruirui 于 2010-8-23 20:05 编辑
请大家帮忙!先说谢谢!礼多人不怪嘛! 知道也不告诉你 我还想回来着
回答不是义务 交流是兴趣 不要搞混了 如果LZ能在多一點耐心、少一點脾氣
可能效果會更好
這裡是個論壇,並不是你的小王國
回答不是義務 交流是興趣
http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=17822&pid=198190&fromuid=7640437
修養自身做起,學習從頭學起 回复 4# xjdjpbp
多谢多谢!平静下来!一定要冷静! 回复 3# rolaka
刚开始,冲动了。非常渴望看到你回答的第2句话究竟是什么内容,渴望得到你的帮助! 回复 6# yiruirui
不用期待我的回帖,因為我自己也不懂{:1_428:}
我不知道你是winapi函式看不懂....還是哪邊看不懂
我把我找到的po給你,你看有沒有用
http://www.autoitx.com/forum.php?mod=viewthread&tid=2452
上面那個連結是ACN之前有人提問過得,不過也是不了了之。
下面那個連結是WINAPI函式查詢,希望對你有幫助
http://tlcheng.twbbs.org/TLCheng/WinAPI/winapi.asp 回复 7# xjdjpbp
3KS all the same!下面的那个链接好像失效了! 回复 8# yiruirui
可能是網路的關係
(那個網站是台灣主機)
http://www.autoitx.com/forum.php?mod=viewthread&tid=15708&highlight=winapi
ACN高手漢化的WINAPI,你看看 $tSize = DllStructCreate($tagSIZE) 这个就看不懂了,tagsize这个变量前面也没定义,直接就跑出来,就算形成了新的结构体,谁也不知道里面包含哪些元素,是不?汗! $tagSIZE 是个常量 = "int X;int Y" 回复 11# afan
首先感谢A版,请问$tagPOINT,$tagBLENDFUNCTION, 也是常量?那分别代表什么东西呢? 回复 12# yiruirui
都是常量,可以在帮助文档中找到定义
$tagPOINT = "int X;int Y" 定义点的 X 和 Y 坐标
$tagBLENDFUNCTION = "byte Op;byte Flags;byte Alpha;byte Format" 控制源位图到目标位图的混合 本帖最后由 rolaka 于 2010-8-24 16:11 编辑
oh 我鸭梨好大 我觉得这是没有教养的表现 渣滓 本帖最后由 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我也没办法 我只能告诉你自重