解决方案 »

  1.   


    你知道透明的概念吗?
    透明就是没有
    也就是用
    CRgn挖个洞就可以
    你确定半透明用这方式能行?
      

  2.   


    你知道透明的概念吗?
    透明就是没有
    也就是用
    CRgn挖个洞就可以
    你确定半透明用这方式能行?打错了,不好意思 ,透明和半透明都不知道怎么搞
    CRgn挖个洞是什么意思
    能具体点吗,有没有示例工程。
    我想实现 的是基于单视图文档程序,就是视图客户区透明或半透明效果
    网上写的
    void CtvView::OnInitialUpdate()
    {
    CView::OnInitialUpdate(); // TODO: 在此添加专用代码和/或调用基类
    SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
    GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); HINSTANCE hInst = LoadLibrary(_T("User32.DLL")); 
    if(hInst) 

    INT ret;
    typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); 
    MYFUNC fun = NULL;
    //取得SetLayeredWindowAttributes函数指针 
    fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
    if(fun)
    {
    ret = fun(this->GetSafeHwnd(), RGB(255, 255, 255), 200, LWA_COLORKEY); 
    ret = GetLastError();//ret = 87,ERROR_INVALID_PARAMETER,
    }
    FreeLibrary(hInst); 
    }
    }
    总提示参数错误,怎么错误了,还是这种做法就不对啊
      

  3.   

    layered window半透明只能用于主窗口,比如你希望只有视图半透明,主窗口标题啦菜单啦都不透明,那么普通方法是无法实现的,因为视图窗口其实是主窗口的一个子窗。只有变通的方法可以实现类似效果,比如设置视图类主窗口的透明度为1(肉眼看不见但是可以接受鼠标/键盘的操作控制)然后设置一个和主窗口一样大小的显示Layered窗口重叠放在主窗口下方,通过创建一幅32为bitmap作为中间桥梁,通过bitblt复制肉眼看不见的窗口上所有显示然后处理其中透明部分的alpha值再通过UpdateLayeredWindow显示到显示窗口中。如果想简单就设置定时器定时更新显示窗口的图片,如果不怕麻烦则截获肉眼不可见窗口的各种更新事件然后在窗口发生变化时再更新显示窗口。