MSDN COLORREF结构宏,Python

时间:2011-08-28 21:49:53

标签: winapi macros pywin32 ctype

我正在尝试使用SetLayeredWindowAttributes功能更改窗口透明度颜色。我使用ctypes模块制作了一个结构。我很确定我必须使用COLORREF RGB宏来使其正常工作。

如何在使用ctypes的结构上使用宏?

我要去的地方。

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()

1 个答案:

答案 0 :(得分:4)

三件事:

  1. C代码外部不存在C预处理器宏。它们在实际编译之前进行文本扩展。
  2. COLORREF是DWORD的typedef,而不是结构。
  3. 所有RGB宏都有一些位移以获得0x00bbggrr值。
  4. 所以代码看起来像这样:

    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)