强烈关注
肯定可以实现,win2000的菜单就是fader出来的,只要不改变alpha值(透明度),既不产生fader效果,就是半透明的。
我知道用SetLayeredWindow生成透明窗体,用UpdateLayeredWindow改变Alpha值

解决方案 »

  1.   

    SetLayeredWindow只能在Win2000下用
      

  2.   


        如果要在所有的Win32平台运行的话,恐怕只有自己做了!不过好像这也不是特别难。你有没有注意到一点:menu在显示中差不多是位置固定的。这就比较好办了。你自己写一个菜单窗口(TrackPopupMenu也是这么做的,它的窗口类名好像是#32767),并且在窗口显示以前把背景存下来(就像抓图程序那样),然后在它的OnPaint()里面首先把菜单内容画在一个内存DC里。接下来,把这个DC和背景DC使用Alpha结合即可产生任意透明度。    使用的技术几乎都是很常规的,只是综合起来就没那么容易了,呵呵。最后提醒一下:这种方法有个缺陷,即它假定背景是静态的。如果你那个view是动画的话。。呵呵。。自己想办法吧。搞定了别忘了告诉我。
      

  3.   


        如果要在所有的Win32平台运行的话,恐怕只有自己做了!不过好像这也不是特别难。你有没有注意到一点:menu在显示中差不多是位置固定的。这就比较好办了。你自己写一个菜单窗口(TrackPopupMenu也是这么做的,它的窗口类名好像是#32767),并且在窗口显示以前把背景存下来(就像抓图程序那样),然后在它的OnPaint()里面首先把菜单内容画在一个内存DC里。接下来,把这个DC和背景DC使用Alpha结合即可产生任意透明度。    使用的技术几乎都是很常规的,只是综合起来就没那么容易了,呵呵。最后提醒一下:这种方法有个缺陷,即它假定背景是静态的。如果你那个view是动画的话。。呵呵。。自己想办法吧。搞定了别忘了告诉我。
      

  4.   

    to classfactory(void)  好主意!
      

  5.   

    如是win2000 请在显示菜单前调用下列程序#define WS_EX_LAYERED           0x00080000
    #define LWA_COLORKEY            0x00000001
    #define LWA_ALPHA               0x00000002typedef BOOL (*_SetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD);
    _SetLayeredWindowAttributes SetLayeredWindowAttributes;
    __declspec( dllexport ) 
    void SetLayered(HWND hWnd,int Pos)
    {
      SetLayeredWindowAttributes 
        = (_SetLayeredWindowAttributes)GetProcAddress(
                     GetModuleHandle("user32.dll"),
                     "SetLayeredWindowAttributes");
      if ( SetLayeredWindowAttributes == NULL )
    return ;
      else{
           __try{
    SetWindowLong(hWnd,GWL_EXSTYLE,
                           GetWindowLong(hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);
    SetLayeredWindowAttributes(hWnd,RGB(0,0,0),Pos,LWA_ALPHA);
           }
           __except(EXCEPTION_EXECUTE_HANDLER){
    AfxMessageBox("SYSTEM FALSE");
           }
    }
      

  6.   

    好久没来,上次来提出了这个问题,然后就忙下去了,今天一来,这么多哥们发表意见呀,呵呵问题我早已经解决了,这是我的方法:
    因为我的半透明菜单是要在Video上显示的,所以大家的所有方法都不能用!
    我的的解决办法是用COM,在显示的时候,MS是把Video用很多所谓的output pin和inpin来
    一层层连起来的,于是我的COM就是把Video Render的pin打断,然后连上我的COM来接管这些
    pin,这样,我就可以操作一个frame的图象数据了,于是我在用半透明算法来实现把一个位图
    和背景融合起来显示,TNND,效果空前的好,而且可以随意的实现对Video的变形、变色、变
    .........嘿嘿,现在你想怎么边我就可以做到了
      

  7.   

     重载CMenu类。及其DrawItem,MeasureItem函数。
      

  8.   

    呵呵,我到是想知道怎么实现,小弟最近到是做了一个类似QQ的那种菜单:)
    当然也是要进行菜单自绘的:)fd_mas:)你能不能把代码给我看看呀,我的邮件地址[email protected]谢了
      

  9.   

    fd_mas(老米飞刀):
    怎么做到的,能不能和小弟共享一下?
    [email protected]