找回密码
 加入
搜索
楼主: powerofos

[GUI管理] [已解决]WinAPI_SetLayeredWindowAttributes 后透明LISTVIEW的点击问题(色值设置)

  [复制链接]
发表于 2011-7-24 12:45:46 | 显示全部楼层
看看学习学习
 楼主| 发表于 2011-7-24 12:49:54 | 显示全部楼层
回复 15# 3mile


这些图标的PNG是从 aero.msstyles 文件中,971 号 png文件中提取的,

我用PHOTOSHOP整理了下,不知道你合不合用,因为我没有把最大化功能

加到GUI中的打算,所以我做的最大化按钮是“灰色” 不可用状态。

这里又有一个取舍:

分层后,PNG的阴影成混沌一块,不分层窗口又不可以扣去背景色透明显示。

我曾经这样写过:注册 WM_PAINT 消息,创建 最小化,最大化,退出按钮的

点选区域LABEL,执行相应的function,向 WM_PATIN  _SendMessage。


关于阴影问题,有什么好建议吗?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-7-24 13:28:32 | 显示全部楼层
是否可以注册WM_LBUTTONDOWN消息,再用_WinAPI_PtInRectEx函数判断是否在PNG的绘制矩形中?
 楼主| 发表于 2011-7-24 14:33:57 | 显示全部楼层
本帖最后由 powerofos 于 2011-7-24 14:35 编辑

回复 18# 3mile


如果你是说用判断矩形区域来代替LABEL是可以的,你是这个意思吗?

我简要测试了下,不过点击的区域判断不算非常精准,可以接受。

不过还是用 WM_LBUTTONUP 吧,WINDOWS的按钮也是 如此。
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;~ #Include <WinAPI.au3>
#Include <WinAPIEx.au3>


Opt('MustDeclareVars', 1)

Global $gui, $guiPos, $pic, $picPos


;----- example 3 PNG work araund by Zedna
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage1, $hform
Global Const $SC_MOVE = 0xF010

_GDIPlus_StartUp()


$hform = GUICreate("abc",600,600,-1,-1)
GUISetBkColor(0xffffff,$hform)



;~ $hGUI = GUICreate("Show PNG", 400, 400,100,0,$WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_MDICHILD),  $hform)  ;  分层
$hGUI = GUICreate("Show PNG", 400, 400,100,0,$WS_POPUP, $WS_EX_MDICHILD,  $hform)                           ;  不分层
Global $color = 0xabcdef
GUISetBkColor($color,$hGUI)




_GDIPlus_StartUp()
$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir&"\png-0011.png")
Global $p_w = _GDIPlus_ImageGetWidth($hImage)
Global $p_H = _GDIPlus_ImageGetWidth($hImage)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)


Global $p_x = 50
Global $p_y = 50


;~ _WinAPI_SetLayeredWindowAttributes($hGUI,0x010101)
;~ _WinAPI_SetLayeredWindowAttributes($hGUI,$color,255)


GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")


GUISetState(@SW_SHOW,$hGUI)
GUISetState(@SW_SHOW,$hform)


;~ _WinAPI_SetParent($hGUI, $hform)

;~ GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
;~ GUIRegisterMsg($WM_LBUTTONDOWN,"WM_LBUTTONDOWN")
GUIRegisterMsg($WM_LBUTTONUP,"WM_LBUTTONUP")
;~ GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")




do
until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()


Func WM_LBUTTONUP($ihWnd,$iMsg,$iwParam,$ilParam)
        If $ihWnd = $hGUI Then
                Local $x = BitAND($ilParam, 0xFFFF) 
                Local $y = BitShift($ilParam, 16) 
                
                If _WinAPI_PtInRectEx($x, $y, $p_x, $p_y, $p_x+$p_w, $p_y+$p_H) = 1 Then
;~                         MsgBox(0,"", "你点击了PNG")
                        ToolTip("你点击了PNG")
                EndIf
        EndIf        
        
EndFunc



Func WM_LBUTTONDOWN($ihWnd,$iMsg,$iwParam,$ilParam)
        If $ihWnd = $hGUI Then
                Local $x = BitAND($ilParam, 0xFFFF) 
                Local $y = BitShift($ilParam, 16) 
                
                If _WinAPI_PtInRectEx($x, $y, $p_x, $p_y, $p_x+$p_w, $p_y+$p_H) = 1 Then
;~                         MsgBox(0,"", "你点击了PNG")
                        ToolTip("你点击了PNG")
                EndIf        
                
        EndIf        
;~         Switch $ihWnd
;~                 Case $hGUI
;~                         _SendMessage($hGUI,$WM_SYSCOMMAND,$SC_MOVE+$HTCAPTION,0)
;~         EndSwitch                
EndFunc





Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, $p_x, $p_y)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
EndFunc
发表于 2011-7-24 15:17:33 | 显示全部楼层
回复 19# powerofos
不精确的原因也许是因为你的第40行获取图形高度这句用错了吧.
这句Global $p_H = _GDIPlus_ImageGetWidth($hImage)
改为Global $p_H = _GDIPlus_ImageGetHeight($hImage)
 楼主| 发表于 2011-7-24 15:24:31 | 显示全部楼层
本帖最后由 powerofos 于 2011-7-24 15:25 编辑

回复 20# 3mile


哈,我刚好用了个 W = H 的PNG,没发现...

我本意是这函数本身是矩形方块,不及Rgn,不过Rgn的话我又不懂。
发表于 2011-7-24 15:33:47 | 显示全部楼层
 楼主| 发表于 2011-7-24 15:46:07 | 显示全部楼层
本帖最后由 powerofos 于 2011-7-24 15:47 编辑

在这谈主题外的问题,不知道合适不,我在官网中别人的帖子发问相关的问题,被嫌弃了。。


不过我还是希望能得到我这个主题问题的答案,就暂时不结贴了。
发表于 2011-7-30 10:27:16 | 显示全部楼层
wow~ Good~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-1 07:42 , Processed in 0.098986 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表