【问题标题】:MSDN COLORREF structure macros, PythonMSDN COLORREF 结构宏,Python
【发布时间】:2011-08-28 21:49:53
【问题描述】:

我正在尝试使用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()

【问题讨论】:

    标签: winapi macros pywin32 ctype


    【解决方案1】:

    三件事:

    1. C 预处理器宏不存在于 C 代码之外。在实际编译发生之前,它们会以文本形式展开。
    2. COLORREF 是 DWORD 的 typedef,而不是结构。
    3. 所有 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)
    

    【讨论】:

      猜你喜欢
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多