添加透明图层后如何防​​止下拉菜单消失

时间:2016-06-21 22:59:12

标签: windows winapi drop-down-menu layered-windows

我构建了一个应用程序,可以在Windows桌面应用程序的上下文中添加屏幕应用程序帮助。当帮助对象与下拉菜单相关时,我遇到的问题是,在添加透明覆盖时,下拉菜单会消失。我应该使用什么属性来保持下拉菜单的可见性?请参阅以下代码,我在此处定义要在当前前景窗口顶部绘制的窗口:

    exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
    style = win32con.WS_DISABLED | win32con.WS_POPUP | win32con.WS_VISIBLE

    oWindow = win32gui.CreateWindowEx(
        exStyle,
        owndClassAtom,
        'Per52Overlay', # WindowName
        style,
        winX1, # x
        winY1, # y
        #win32api.GetSystemMetrics(win32con.SM_CXSCREEN), # width
        #win32api.GetSystemMetrics(win32con.SM_CYSCREEN), # height
        winWidth, #width
        winHeight, #height
        hwnd, # hWndParent
        None, # hMenu
        hInstance,
        None # lpParam
    )
    oWindowHndl = oWindow
    # //msdn.microsoft.com/en-us/library/windows/desktop/ms633540(v=vs.85).aspx
    win32gui.SetLayeredWindowAttributes(oWindow, 0x00ffffff, 255, win32con.LWA_COLORKEY | win32con.LWA_ALPHA)
    hdc, paintStruct = win32gui.BeginPaint(oWindow)
    hPen = win32gui.CreatePen(win32con.PS_SOLID,3, win32api.RGB(0,255,0))
    win32gui.SelectObject(hdc, hPen)
    win32gui.Rectangle(hdc, objX1, objY1, objX2, objY2)
    win32gui.EndPaint(oWindow, paintStruct)
    win32gui.SetWindowPos(oWindow, win32con.HWND_TOPMOST, winX1, winY1, winWidth, winHeight, win32con.SWP_DRAWFRAME | win32con.SWP_NOACTIVATE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW)
    win32gui.ShowWindow(oWindow, win32con.SW_SHOW)
    win32gui.UpdateWindow(oWindow)

在某个阶段,应绘制窗口:

winCrd = win32gui.GetWindowRect(activeWindow)
objCrd = (startX, startY, endX, endY)
drawOnApp(activeWindow, winCrd, objCrd, message)
win32gui.BringWindowToTop(activeWindow)

我的猜测是,我正在对属性做错,结合应该在顶部/激活/到前景等的窗口等。

你可以给我一些线索,让你在这件事上更多地潜水吗?

0 个答案:

没有答案