就好象Windows Live Mail开始运行时的弹出窗口,那个半透明,四周带阴影的窗口呢?

解决方案 »

  1.   

    半透明的窗口是通过SetLayeredWindowAttributes函数,而那些四周带阴影的效果,可以通过算法实现,最简单的是通过图片实现。算法的话你可以看一下一些界面库的源代码,比如说GuiToolKit的菜单里就有这么一个算法。
      

  2.   

    我也有个类似的问题,http://topic.csdn.net/u/20080310/16/399dbd38-105f-4799-a1b6-60d5d0eab97c.html
    SetLayeredWindowAttributes函数,似乎不能处理子窗口,而且好象全窗口透明了以后就不能单独使边框不透明了。
      

  3.   

    主窗口不变,附加一些带WS_EX_LAYERED属性的窗口(透明效果就在这些窗口),主窗口移动时,这些窗口一起移动。
      

  4.   


    void CAboutDlg::DoUpdate(CBitmap &bmp, BYTE SourceConstantAlpha/*= 255*/)
    {
            VERIFY(ModifyStyleEx(0, WS_EX_LAYERED));

    CRect rectDlg;
    GetWindowRect(rectDlg); CDC dcScreen;
    CDC dcMemory; dcScreen.Attach(::GetDC(m_hWnd));
    dcMemory.CreateCompatibleDC(&dcScreen); CBitmap *pOldBitmap= dcMemory.SelectObject(&bmp); BITMAP bmpInfo;
    bmp.GetBitmap(&bmpInfo);
    CPoint ptWindowScreenPosition(rectDlg.TopLeft());
    CSize szWindow(bmpInfo.bmWidth, bmpInfo.bmHeight); BLENDFUNCTION blendPixelFunction = { AC_SRC_OVER, 0, SourceConstantAlpha, AC_SRC_ALPHA };
    CPoint ptSrc(0,0);  ::UpdateLayeredWindow(GetSafeHwnd(), dcScreen, &ptWindowScreenPosition, &szWindow, dcMemory,
    &ptSrc, 0, &blendPixelFunction, ULW_ALPHA);
            dcMemory.SelectObject(pOldBitmap);
    }
    上面是四周带阴影的对话框的例子,想要半透明的话,自己再处理一下颜色,或者用张半透明的图片,很简单的!
      

  5.   

    楼主的需求是Alpha通道透明的vista效果http://www.afe-soft.com/skinListImage/vista_3.jpg
    skinbeauty 换肤库 是一个可选方案,提供免费试用版。
    http://www.afe-soft.com
      

  6.   

    http://www.codeproject.com/KB/dialog/FrameShadow.aspx