最近我想写一个对话框和控件背景都透明的程序,也就是说我的控件上面的字体看上去就像是直接在桌面上显示一样。在网上查了很多资料,关于控件透明很多仁兄都说应该在OnCtlColor()函数中添加pDC->SetBkMode(TRANSPARENT); 来设置背景透明,但是我试了一下,根本没有效果。哪位大哥帮忙解决一下,多谢了。还有基本每个控件都有一个transparent属性,我试了一下,选中和不选中没有什么区别,我想问一下,这个属性在什么情况下使用呢?多谢各位了!

解决方案 »

  1.   

    你这个需求其实就是创建不规则窗体
    看看这个
    http://www.vckbase.com/document/viewdoc/?id=1345
      

  2.   

    OnCtlColor内部使用pDC只能让控件透明,而不是对话框也透明
      

  3.   

    对话框窗口透明API范例
    SetLayeredWindowAttributes在OnInitDialog()加入://加入WS_EX_LAYERED扩展属性
    SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
    GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
    HINSTANCE hInst = LoadLibrary("User32.DLL"); 
    if(hInst) 

    typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); 
    MYFUNC fun = NULL;
    //取得SetLayeredWindowAttributes函数指针 
    fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
    if(fun)fun(this->GetSafeHwnd(),0,128,2); 
    FreeLibrary(hInst); 
    }
      

  4.   

    http://blog.csdn.net/haikesx/archive/2008/05/10/2425987.aspx
      

  5.   

    给你一个网址,不一定完全和你的一样,不过可以做参考,是透明控件的自定义
    http://www.cnblogs.com/laowen/archive/2009/05/17/1458683.html代码网上能找到,我这边也有
      

  6.   

    在窗口创建之前,修改窗口类吧。将背景改成透明色的。GetStockObject(NULL_BRUSH),试试看行不行。
      

  7.   


    typedef BOOL(FAR PASCAL*LAYERFUNC)(HWND,COLORREF,BYTE,DWORD); void SetTransparent(HWND hwnd,UINT alpha) 

     LAYERFUNC SetLayer; 
     HMODULE hmod=LoadLibrary(_T("user32.dll")); 
     SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd,GWL_EXSTYLE)|0x80000L); 
     SetLayer=(LAYERFUNC)GetProcAddress(hmod, "SetLayeredWindowAttributes "); 
     SetLayer(hwnd,0,alpha,0x2);  FreeLibrary(hmod); 

      

  8.   

    谢谢你,果然用不规则窗体可以解决问题。但是还有一个问题我用第二种方法显示的文字字体颜色为什么改不了呢?我想用红色字体显示,这样显眼一些,但是我用SetTextColor设置成红色根本没用