怎样才能实现透明窗口背景?
能通过擦除窗口背景来实现吗?
若通过修改窗口形状来实现,怎么才能根据窗口中的文字来确定窗口形状,
而不是用图片来修改窗口的形状?

解决方案 »

  1.   

    你可以用SetLayeredWindowAttributes来作透明窗体,这样比较简单
    用Region设定窗口区域也可以,不过你得先把文字画到位图上,然后根据位图来裁剪
      

  2.   

    恩,窗口的“透明”一般就是用SetLayeredWindowAttributes或异性窗口的
      

  3.   

    SetLayeredWindowAttributes把整个窗口都变成透明的,我不想让文字也变得透明。
    有没有其他方法?
      

  4.   

    窗口形状可以通过 SetWindowRgn(); 实现。
    你要什么形状只要你定义一个HRGN变设成你要的形状就行了。
    至于HRGN怎么操作,看MSDN或到网上找!
      

  5.   

    SetupRegion(CDC *pDC)
    {
    CDC memDC;
    CBitmap &cBitmap=m_bmpDraw;
    CBitmap* pOldMemBmp = NULL;
    COLORREF col,colMask;
    CRect cRect;
    int x, y;
    CRgn wndRgn, rgnTemp;
    GetWindowRect(&cRect);
    CPoint ptOrg=cRect.TopLeft();
    BITMAP bmInfo;
    cBitmap.GetObject(sizeof(bmInfo),&bmInfo);
    CRect rcNewWnd=CRect(ptOrg,CSize(bmInfo.bmWidth,bmInfo.bmHeight));
    memDC.CreateCompatibleDC(pDC);
    pOldMemBmp = memDC.SelectObject(&cBitmap);
    colMask=memDC.GetPixel(0,0);
    wndRgn.CreateRectRgn(0, 0, rcNewWnd.Width(), rcNewWnd.Height());
    for(x=0; x<=rcNewWnd.Width(); x++)
    {
    for(y=0; y<=rcNewWnd.Height(); y++)
    {
    col = memDC.GetPixel(x, y);
    if(col == colMask)
    {
    rgnTemp.CreateRectRgn(x, y, x+1, y+1);
    wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_XOR);
    rgnTemp.DeleteObject();
    }
    }
    }
    memDC.SelectObject(pOldMemBmp);
    SetWindowRgn((HRGN)wndRgn, TRUE);
    }colMask 为关键色。
      

  6.   

    如果是非客户区,响应wm_ntpaint:消息,先画出图来进兼容dc,阿而发处理后贴回得到透明效果,然后再处理你写的字,或其他自己需要处理的图片等 如果是客户区,响应wm_paint:消息,同上