用SetWindowRgn设置窗体的显示区域
SetWindowRgn VB声明 
Declare Function SetWindowRgn Lib "user32" Alias "SetWindowRgn" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long 
说明 
这是那些很难有人注意到的对编程者来说是个巨大的宝藏的隐含的API函数中的一个。本函数允许您改变窗口的区域。
通常所有窗口都是矩形的——窗口一旦存在就含有一个矩形区域。本函数允许您放弃该区域。这意味着您可以创建圆的、星形的窗口,也可以将它分为两个或许多部分——实际上可以是任何形状 
返回值 
Long,执行成功为非零值,失败为0 
参数表 
参数 类型及说明 
hWnd Long,将设置其区域的窗口 
hRgn Long,将设置的区域的句柄,一旦设置了该区域,就不能使用或修改该区域句柄,也不要删除它 
bRedraw Boolean,若为TRUE,则立即重画窗口 
注解 
为区域指定的所有坐标都以窗口坐标(不是客户坐标)表示,它们以整个窗口(包括标题栏和边框)的左上角为起点

解决方案 »

  1.   

    呵呵,我知道怎么放置透明的gif图片...动画还不晓得.
    窗体不规则形状.有的是例程.
    麻烦..........
      

  2.   

    感谢您使用微软产品。编程将bitmap图片的背景设为透明的步骤比较复杂。你需要创建掩码分别同bitmap图片和背景图片进行逻辑与操作,再将处理过的bitmap图片和背景图片进行异或操作,就能达到使bitmap图片的背景区域透明的显示背景图片的内容的效果。详细信息请参考:
    Q94961 How to Create a Transparent Bitmap Using Visual Basic
    http://support.microsoft.com/support/kb/articles/q94/9/61.asp
    -        微软全球技术中心 VB技术支持
    本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。为了为您创建更好的讨论环境,请参加我们的用户满意度调查
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
      

  3.   

    有现成的代码呀,去软件区下载,另外这几个函数,看看能不能帮忙。
       方法一:    void CChessBoard::FillMarkedChess(CDC *pDC,CRect rect, COLORREF color) 
        { 
        //color为半透明的底色 
       COLORREF    bkcolor; 
       int R1,G1,B1,R2,G2,B2; 
       R1=color&255; 
       G1=(color>>8)&255; 
       B1=(color>>16)&255; 
       //标记块的左边与右边各多显示一点 
       for(int x=rect.left-1;x<=rect.right;x++) 
       { 
           for(int y=rect.top-1;y<=rect.bottom;y++) 
           { 
               //nRatio为透光率 
               bkcolor=pDC->GetPixel(x,y); 
               R2=bkcolor&255; 
               G2=(bkcolor>>8)&255; 
               B2=(bkcolor>>16)&255; 
               R2=R1+(R2-R1)*m_nRatio/100; 
               G2=G1+(G2-G1)*m_nRatio/100; 
               B2=B1+(B2-B1)*m_nRatio/100; 
               pDC->SetPixel(x,y,RGB(R2,G2,B2)); 
           } 
       } 
       }   方法二:/* 
    这是一个用来填充透明位图的函数 
    CDC *pDC 需要画位图的CDC指针 
    HBITMAP hBitmap 位图's m_hObject 
    CRect &rect 指定位图在pDC中的位置 
    COLORREF rgbMask 位图的透明色 
    */ 
    void FillTransparentHBitmap(CDC *pDC, HBITMAP hBitmap,CRect &rect, COLORREF rgbMask) 

       CDC ImageDC,MaskDC; 
       CBitmap Image,*pOldImage=NULL; 
       CBrush *oldBrush=NULL; 
       CBitmap maskBitmap,*pOldMaskDCBitmap ;    //Image.LoadBitmap(IDImage); 
       Image.Attach(hBitmap);    ImageDC.CreateCompatibleDC(pDC); 
       //CBrush br(&Image); 
       pOldImage=ImageDC.SelectObject(&Image); 
       //ImageDC.FillRect(rect,&br); 
       BITMAP bm; 
       Image.GetBitmap(&bm);    MaskDC.CreateCompatibleDC(pDC); 
       maskBitmap.CreateBitmap( rect.Width(), rect.Height(), 1, 1, NULL ); 
       pOldMaskDCBitmap = MaskDC.SelectObject( &maskBitmap );    ImageDC.SetBkColor(rgbMask); 
       int ix=0,iy=0; 
       for(iy=0;iy<rect.Height();iy+=bm.bmHeight) 
       { 
           for(ix=0;ix<rect.Width();ix+=bm.bmWidth) 
           { 
               MaskDC.BitBlt( ix, iy, bm.bmWidth, bm.bmHeight, &ImageDC, 0, 0, SRCCOPY ); 
           } 
       }    ImageDC.SetBkColor(RGB(0,0,0)); 
       ImageDC.SetTextColor(RGB(255,255,255)); 
       ImageDC.BitBlt(0, 0, rect.Width(), rect.Height(), &MaskDC, 0, 0, SRCAND);    pDC->BitBlt(rect.left,rect.top,rect.Width(), rect.Height(), &MaskDC, 0, 0, SRCAND); 
       for(iy=rect.top;iy<rect.Height();iy+=bm.bmHeight) 
       { 
           for(ix=rect.left;ix<rect.Width();ix+=bm.bmWidth) 
           { 
               //MaskDC.BitBlt( ix, iy, bm.bmWidth, bm.bmHeight, &ImageDC, 0, 0, SRCCOPY ); 
               pDC->BitBlt(ix,iy,bm.bmWidth, bm.bmHeight, &ImageDC, 0, 0,SRCPAINT); 
           } 
       } 
       //pDC->BitBlt(rect.left,rect.top,rect.Width(), rect.Height(), &ImageDC, 0, 0,SRCPAINT);    MaskDC.SelectObject(pOldMaskDCBitmap); 
       ImageDC.SelectObject(pOldImage); 
       //ImageDC.SelectObject(oldBrush);    Image.Detach(); 

      方法三:BOOL BitBlt_HT( 
     HDC hdc,//目標DC 
     RECT rect,//目標區域 
     COLORREF maskColor,//半透明前景 
     UINT maskRatio//半透明前景比重 ( 0 - 100 ) 


       int x,y; 
       COLORREF bColor; 
       BYTE b_R,b_G,b_B,f_R,f_G,f_B; 
        
       maskRatio = maskRatio % 100; 
       f_R = GetRvalues(maskColor);f_G = GetGvalues(maskColor);f_B = GetBvalues(maskColor);    HDC hMemDC = ::CreateCompatibleDC(hdc); 
       if (hMemDC == NULL) return 0; 
       HBITMAP hOldBmp,hNewBmp = ::CreateCompatibleBitmap(hdc,rect.right - rect.left ,rect.bottom - rect.top ); 
       if (hNewBmp == NULL) 
       { 
           ::DeleteDC (hMemDC); 
           return 0; 
       } 
       hOldBmp = (HBITMAP)::SelectObject(hMemDC,hNewBmp); 
       ::BitBlt (hMemDC,0,0 ,rect.right-rect.left ,rect.bottom - rect.top ,hdc,rect.left ,rect.top,SRCCOPY); 
        
       for (y = 0 ; y <rect.bottom - rect.top ; y ++) 
       { 
           for (x = 0 ; x <= rect.right - rect.top; x++) 
           { 
               bColor = GetPixel(hMemDC,x,y); 
               b_R = GetRvalues(bColor);b_G = GetGvalues(bColor);b_B = GetBvalues(bColor); 
               bColor = RGB(f_R*maskRatio/100+b_R*(100-maskRatio)/100,f_G*maskRatio/100+b_G*(100-maskRatio)/100,f_B*maskRatio/100+b_B*(100-maskRatio)/100); 
               SetPixel(hMemDC,x,y,bColor); 
           } 
       } 
       ::BitBlt (hdc,rect.left ,rect.top ,rect.right-rect.left ,rect.bottom - rect.top ,hMemDC,0,0,SRCCOPY); 
       ::SelectObject(hMemDC,hOldBmp); 
       ::DeleteObject (hNewBmp); 
       ::DeleteDC (hMemDC); 
       return 1; 
    }