我把对话框的背景设置成了一个位图,但是其余部分,比如说静态文本框,滑杆啊什么的那些部分都是一个一个的不透明矩形,怎么把他们弄成透明啊,比如说静态文本框只有文字不透明,其余部分都透明,不要出现一个矩形的不透明的框。
我在这些控件的属性设置里面把Transparent打勾了也没用。

解决方案 »

  1.   

    Details see WM_CTLCOLOR message.
      

  2.   

    SetLayeredWindowAttributes
    用这个函数
      

  3.   

    typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);  
    #define WS_EX_LAYERED           0x00080000
    BOOL CContr0lDlg::OnInitDialog()
    {
    ........................
      SetWindowLong(m_hWnd,GWL_EXSTYLE,
              GetWindowLong(m_hWnd,GWL_EXSTYLE) | WS_EX_LAYERED);
    HINSTANCE hInst = LoadLibrary("User32.DLL"); 
    if(hInst) 
    {  
        MYFUNC fun = NULL;
    fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
    if(fun)
            fun(m_hWnd,RGB(255,255,255), 0, (DWORD)1);
        FreeLibrary(hInst); 
    hInst = NULL;
    }  ::RedrawWindow(m_hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
    }
      

  4.   

    重载OnCtrlColor,return一个空画刷
      

  5.   

    在OnCtrlColor里
    控件对象.SetBkMode(TRANSPARENT)
      

  6.   

    HBRUSH CYourDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); switch(nCtlColor)
    {
    case CTLCOLOR_LISTBOX:
    return m_hBlueBrush;
    } return hbr;
    }
    nCtlColor以下几种值:
    WM_CTLCOLORBTN   按钮控件 
    WM_CTLCOLORDLG   对话框 
    WM_CTLCOLOREDIT   编辑控件 
    WM_CTLCOLORLISTBOX   列表框控件 
    WM_CTLCOLORSCROLLBAR   滚动条控件
    WM_CTLCOLORSTATIC   静态文本控件