窗体中间部份是透明的,可以看到下层窗体的视频,怎么样才能让鼠标不穿透中间的透明区域?因为我想做的效果是要在视频上绘画win7下面中间透明部份鼠标无法穿透,效果实现了,可是换到xp系统下面鼠标点击中间透明部份的时候居然穿到下一层的视频上去了,导致无法绘画成功。
求救!!!对了,小弟木有分。不好意思了

解决方案 »

  1.   

    完全透明应该是通过SetWindowRgn实现的吧
    那透明的位置就是空的
    所以一定会穿透啊
    你说win7不会?
      

  2.   

    是。win7的不会我试了一下是可以的。xp下,只要在透明部分画画就是点到下一层的视频上
    透明我用的是指定窗体颜色的那种透明方式
      

  3.   

    COLORREF maskColor = RGB(2,255,255);
    SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
    HINSTANCE hInst=LoadLibrary(_T("User32.DLL"));
    if(hInst)
    {
    typedef BOOL (WINAPI * MYFUNC)(HWND , COLORREF,BYTE,DWORD);
    MYFUNC fun=NULL;
    fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
    if(fun)fun(this->GetSafeHwnd(),maskColor,0,1);
    ::RedrawWindow(this->GetSafeHwnd(), NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); 
    FreeLibrary(hInst);
    }dc.FillSolidRect(rectTracker->m_rect,RGB(2,255,255));//视频的地方透明
    这是窗体中间透明的代码。。
      

  4.   

    还有一个问题是窗体加载的PNG图片,透明区域为什么变成线绿色的了就是无法透明了。
      

  5.   

    xp和win7绘图机制不一样
    或许win7下这种透明没有做穿透
    xp是穿透的
    这个是正常的
    你可以试试调整透明度为1而不是0看看效果
    要想通过透明png做窗口要用UpdateLayeredWindow
    否则就是你说的这个效果
    有的时候是粉色