Winapi MSDN COLORREF结构宏,Python
我正在尝试使用该函数更改windows透明度颜色。我使用ctypes模块创建了一个结构。我很确定我必须使用RGB宏才能让它正常工作 如何在使用ctypes生成的结构上使用宏 我要做的事Winapi MSDN COLORREF结构宏,Python,winapi,macros,pywin32,ctype,Winapi,Macros,Pywin32,Ctype,我正在尝试使用该函数更改windows透明度颜色。我使用ctypes模块创建了一个结构。我很确定我必须使用RGB宏才能让它正常工作 如何在使用ctypes生成的结构上使用宏 我要做的事 import Tkinter as tk import win32gui import win32con class ColorRef (ctypes.Structure) : _fields_ = [("byRed", ctypes.c_byte), ("byGre
import Tkinter as tk
import win32gui
import win32con
class ColorRef (ctypes.Structure) :
_fields_ = [("byRed", ctypes.c_byte),
("byGreen", ctypes.c_byte),
("byBlue", ctypes.c_byte)]
# makes a Tkinter window
root = tk.Tk()
# a handle to that window
handle = int(root.wm_frame(), 0)
# a COLORRED struct
colorref = ColorRef(1, 1, 1)
# attempting to change the transparency color
win32gui.SetLayeredWindowAttributes(handle, colorref, 0, win32con.LWA_COLORKEY)
root.mainloop()
三件事:
0x00bbggrr
值def RGB(r, g, b):
r = r & 0xFF
g = g & 0xFF
b = b & 0xFF
return (b << 16) | (g << 8) | r
colour = RGB(1, 1, 1)
win32gui.SetLayeredWindowAttributes(handle, colour, 0, win32con.LWA_COLORKEY)
def RGB(r,g,b):
r=r&0xFF
g=g&0xFF
b=b&0xFF
回报(b3件事:
C预处理器宏不存在于C代码之外。它们在实际编译之前经过文本扩展
COLORREF是DWORD的类型定义,而不是结构
RGB宏所做的只是一些位移位,以获得0x00bbggrr
值
因此,代码如下所示:
def RGB(r, g, b):
r = r & 0xFF
g = g & 0xFF
b = b & 0xFF
return (b << 16) | (g << 8) | r
colour = RGB(1, 1, 1)
win32gui.SetLayeredWindowAttributes(handle, colour, 0, win32con.LWA_COLORKEY)
def RGB(r,g,b):
r=r&0xFF
g=g&0xFF
b=b&0xFF
返回(b)