none
SetLayeredWindowAttributes API透明的窗口在WIN7下面鼠标不能穿透。 RRS feed

  • 问题

  • 我用SetLayeredWindowAttributes 用颜色透明了一个窗口,透明值为0,为什么在XP下面鼠标可以穿过这个透明窗口点在下面的窗口上,而在WIN7上面却不能穿透呢。

    2011年1月5日 16:51

答案

  • 您好,

        卡特,请尝试改变下主题:

        请在win7桌面右键--选择Personalization--在Basic and High Contrast Themes 中选择Windows Classic主题。再试下是否有这个问题。

        如果您的问题解决了,请把有用的回答标记为答案!

        谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月7日 9:05
    版主
  • 在你的程序里面把WM_MOUSE系列的消息自己处理一下,全都转发给GetParent(你的窗口句柄)这个窗口应该就可以了
    0xBAADF00D
    2011年1月9日 14:05
    版主

全部回复

  • 您好,

        卡特,请尝试改变下主题:

        请在win7桌面右键--选择Personalization--在Basic and High Contrast Themes 中选择Windows Classic主题。再试下是否有这个问题。

        如果您的问题解决了,请把有用的回答标记为答案!

        谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月7日 9:05
    版主
  • 我的一切正常

    1.vs2010新建一个win32工程

    2.CreateWindow改成CreateWindowEx,并加上WS_EX_LAYERED。

    3.创建完窗口之后SetLayeredWindowAttributes(hWnd,RGB(255,0,255),255,LWA_COLORKEY);

    4.wm_paint中:

    HBRUSH hBrush = CreateSolidBrush(RGB(255,0,255));

    RECT rc={10,10,100,100};

    FillRect(hdc,&rc,hBrush);

    DeleteObject(hBrush);

     

    使用win7并启用aero效果。

    2011年1月7日 14:23
  • 果然是主题原因,AERO特效主题会导制透明窗口鼠标不能穿透。有什么办法让AERO主题下面鼠标可以穿透透明窗口呢?

    2011年1月8日 15:30
  • 在你的程序里面把WM_MOUSE系列的消息自己处理一下,全都转发给GetParent(你的窗口句柄)这个窗口应该就可以了
    0xBAADF00D
    2011年1月9日 14:05
    版主