读书人

关于 函数SetLayeredWindowAttributes

发布时间: 2012-03-16 16:34:56 作者: rapoo

关于 函数SetLayeredWindowAttributes 的怪问题!
我在使用函数SetLayeredWindowAttributes 的时候,

Private Declare Function GetWindowLong Lib "user32 " Alias "GetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32 " (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long


代码二:形状不规则的窗体
Private Sub Form_Load()
  Dim rtn As Long
  BorderStyler=0
  rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
  rtn = rtn Or WS_EX_LAYERED
  SetWindowLong hwnd, GWL_EXSTYLE, rtn
  SetLayeredWindowAttributes hwnd, &HFF0000, 0, LWA_COLORKEY '将扣去窗口中的蓝色
End Sub

问题是,在本机上都正常,但是在其他机器上,2000 或者 XP 都无法去掉蓝色部分,请各位大大指教一下。

[解决办法]
你参数位置错了,不是
SetLayeredWindowAttributes hwnd, &HFF0000, 0, LWA_COLORKEY '将扣去窗口中的蓝色
应该是
SetLayeredWindowAttributes hwnd, 0, &HFF0000, LWA_COLORKEY '将扣去窗口中的蓝色
第二三个参数位置换一下~~~~~~~~~
[解决办法]
Private Declare Function GetWindowLong Lib "user32 " Alias "GetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32 " (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long


Private Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1

Private Sub Form_Load()
Dim rtn As Long

rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, rtn

SetLayeredWindowAttributes hwnd, &HFF00FF, 0, LWA_COLORKEY '将扣去窗口中的蓝色

End Sub


去掉洋红色
LZ 代码没有问题

读书人网 >VB

热点推荐