因为程序中涉及到背景贴图,但是位图的边框是圆角型的,将位图中多余的颜色透明之后,却看到窗口背景色在那个区域显示  很碍眼  有没有解决方法   查了一下  说是用setlayeredwindowattributes  ,但是我贴的图不止一个  不知道该怎么办  有没有例子之内的呢

解决方案 »

  1.   


    void TransparentForm(HWND hWnd,int n) 

        HINSTANCE hInstDLL = LoadLibrary("User32.DLL"); 
        if(hInstDLL) 
        { 
            SetWindowLong(hWnd,GWL_EXSTYLE, GetWindowLong(hWnd,GWL_EXSTYLE)^0x80000); 
            typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); 
            MYFUNC fun = NULL; 
            fun=(MYFUNC)GetProcAddress(hInstDLL, "SetLayeredWindowAttributes"); 
            if(fun)fun(hWnd,0,n,2); 
            FreeLibrary(hInstDLL); 
        } 

      

  2.   

    如果是不规则形状窗口 一定要用到SetWindowRgn的,不管是不是半透明
      

  3.   

    赞3楼的。
    可以根据背景图和所想要透明掉的其中颜色;从而得到区域。
    然后利用SetWindowRgn就可以将窗口创建为你所需要的不规则形状窗口
      

  4.   

    可以写个函数
    根据位图转成HRGN
    网上应该有这样的代码
    这样就能随意创建出需要的窗口区域
      

  5.   

    很简单,你获取窗口背景的DC,然后先把背景DC绘制出来,再绘制自己图像还有更厉害的,看链接~
    http://www.codeproject.com/KB/dialog/PerfectTranlucentDlg.aspx
      

  6.   

    http://www.codeproject.com/ http://www.codeguru.com/ 到这两个网站去吧,一定有你想要的代码,呵呵!
      

  7.   

    还是这个简单http://www.vckbase.com/document/viewdoc/?id=1345
      

  8.   

    搞定了  还是用setwindowrgn实现的  谢谢各位