1. 可以修改MFC中各控件的源码,不过后果...
2. 自己从那些控件中派生子类,简单点的话,重载"WM_ERASEBKGND"消息函数时直接返回TRUE就可以了!!

解决方案 »

  1.   

    THANK ntu,还有没有更直接点的??
    我记得好像见过一种更简单的方法,不过现在忘光光了,哈。提个醒吧!
    (书到用时方恨多!!!)
      

  2.   

    透明?透到那去.要是透到桌面上.我可不知.要能实现可真开眼.
    CBUTTON.你可以用MOVEMOUSE.PTINRECT .DRAW3DRECT.LBUTTONDOWN.我就是这样用的.方便.,
    CLISTTREE.也是能看到背景吗?补个位图.
      

  3.   

    HBRUSH YourFormView/*YourDialog*/::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        switch (nCtlColor)
        {
            case CTLCOLOR_BTN://按钮?
            {
                pDC->SetBkMode(TRANSPARENT);//透明
            }       
            case CTLCOLOR_STATIC://静态
            {
                pDC->SetBkMode(TRANSPARENT);//透明!!!!!!!
            }
            case CTLCOLOR_DLG:
            {
                CBrush*    back_brush;
                COLORREF    color;
                color = (COLORREF) GetSysColor(COLOR_BTNFACE);
                back_brush = new CBrush(color);
                return (HBRUSH) (back_brush->m_hObject);
            }
        }
        return(CFormView/*CDialog*/::OnCtlColor(pDC, pWnd, nCtlColor));
    }以上来自MFC FAQ in MSDN
      

  4.   

    Static Text 是可以直接透明的,但是Button 这类不可能直接透明,除非自己写类;CBrush m_HollowBrush;
    m_HollowBrush.CreateStockObject(HOLLOW_BRUSH);HBRUSH CDlgBmp::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if (nCtlColor == CTLCOLOR_STATIC) {
    pDC->SetBkMode(TRANSPARENT);
    return HBRUSH(m_HollowBrush);
    }
    return hbr;
    }m_HollowBrush 为dialog的成员变量,事先生成的透明刷子
      

  5.   

    试一试::SetClassLong(hWnd,GCL_HBRBACKGROUND,NULL)hWnd 控件窗体句柄