代码如下,XP中运行正常,在windows7中则整个窗口都不见了:SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(m_hWnd,0,200, 2);另求教为何在设置透明度之前要将窗口风格加上WS_EX_LAYERED?经调试去除该风格后窗口就显示出来了,但是透明效果也看不见了

解决方案 »

  1.   

    SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
     bool b = SetLayeredWindowAttributes(RGB(255,255,255),255/2,LWA_COLORKEY);
      

  2.   

    不行的,因为我将桌面进程设为了当前窗口的父窗口,而子窗口是不能有GWL_EXSTYLE风格的,这导致了在Windows7下我的程序窗口显示不出来了。没人知道怎么解决吗?我在网上查了整个下午了还没找到答案
      

  3.   

    强制刷下看看。
    SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
    SetLayeredWindowAttributes(m_hWnd,0,200, 2);
    ShowWindow(SW_SHOW);
    Invalidate(); 
      

  4.   

    虽然很暴力,但还是没有用。据说是窗口从此不接收WM_PAINT消息了,我在这个消息事件里下断点,发现真是这样,隐藏后就再也没有断到过。
      

  5.   

    浮在桌面用WS_EX_TOPMOST也可以吧,为什么要让桌面做父窗口呢?
    m_hWnd是dialog吗?
      

  6.   

    http://www.codeproject.com/KB/GDI-plus/DesktopLyrics.aspx
      

  7.   

    问题解决了,在CSDN过往贴里找到的答案,就是给窗口设WS_EX_TRANSPARENT扩展风格,这样鼠标点在窗口上就会穿透到桌面了.但由于再不是桌面的子窗口,点击“显示桌面”时,还是会被隐藏掉
      

  8.   

    给窗口设了WS_EX_TRANSPARENT扩展风格后,就有了“将窗口设为桌面的子窗口”的效果了,由于窗口无视鼠标点击直接传给桌面,所以窗口永远也不会覆盖掉其它应用程序窗口,但是点“显示桌面”隐藏这个问题除了将桌面设为父窗口外我还没有找到其它的解决方案,求助中
      

  9.   

    ModifyStyleEx (WS_EX_APPWINDOW|WS_EX_DLGMODALFRAME,WS_EX_TOOLWINDOW|WS_EX_CONTROLPARENT );
     SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE );