如何将CStatic控件的背景色设为透明呢,在对话框中

解决方案 »

  1.   

    从CStatic类派生自己类,重载ON_WM_CTLCOLOR_REFLECT()。需要现成的可以告诉我Mail,我发给你
    或者你到网上搜索一下!
      

  2.   

    参考代码:
    //头文件
    /*===========================================================================
    ====                                                                     ====
    ====    File name           :  StaticTrans.h                             ====
    ====    Creation date       :  7/10/2001                                 ====
    ====    Author(s)           :  Dany Cantin                               ====
    ====                                                                     ====
    ===========================================================================*/#ifndef STATICTRANS_H
    #define STATICTRANS_H#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    /////////////////////////////////////////////////////////////////////////////
    // CStaticTrans window#define TRANS_BACK -1class CStaticTrans : public CStatic
    {
        // Construction
    public:
        CStaticTrans();
        
    private:
        COLORREF m_TextColor;
        COLORREF m_BackColor;
        CBrush   m_Brush;
        
    // Operations
    public:
        void SetTextColor(COLORREF col) { m_TextColor = col;
                                          UpdateCtrl();      }
        void SetBackColor(COLORREF col) { m_BackColor = col;
                                          UpdateCtrl();      }private:
        void UpdateCtrl();
        
    // Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CStaticTrans)
    //}}AFX_VIRTUAL// Implementation
    public:
    virtual ~CStaticTrans(); // Generated message map functions
    protected:
    //{{AFX_MSG(CStaticTrans)
    afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
    //}}AFX_MSG DECLARE_MESSAGE_MAP()
    };
    #endif // STATICTRANS_H
      

  3.   

    //CPP文件
    /*===========================================================================
    ====                                                                     ====
    ====    File name           :  StaticTrans.cpp                           ====
    ====    Creation date       :  7/10/2001                                 ====
    ====    Author(s)           :  Dany Cantin                               ====
    ====                                                                     ====
    ===========================================================================*/#include "stdafx.h"
    #include "StaticTrans.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CStaticTransCStaticTrans::CStaticTrans()
    {
        m_TextColor = RGB(0, 0, 0);
        m_BackColor = TRANS_BACK;    
    }CStaticTrans::~CStaticTrans()
    {
    }
    BEGIN_MESSAGE_MAP(CStaticTrans, CStatic)
    //{{AFX_MSG_MAP(CStaticTrans)
    ON_WM_CTLCOLOR_REFLECT()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CStaticTrans message handlersHBRUSH CStaticTrans::CtlColor(CDC* pDC, UINT nCtlColor) 
    {
        m_Brush.DeleteObject();
        
        if (m_BackColor == TRANS_BACK) {
            m_Brush.CreateStockObject(HOLLOW_BRUSH);
            pDC->SetBkMode(TRANSPARENT);
        }
        else {
            m_Brush.CreateSolidBrush(m_BackColor);
            pDC->SetBkColor(m_BackColor);
        }
        
        pDC->SetTextColor(m_TextColor);
        
        return (HBRUSH)m_Brush;
    }void CStaticTrans::UpdateCtrl()
    {
        CWnd* pParent = GetParent();
        CRect rect;
        
        GetWindowRect(rect);
        pParent->ScreenToClient(rect);
        rect.DeflateRect(2, 2);
        
        pParent->InvalidateRect(rect, FALSE);    
    }
      

  4.   

    楼上的都太复杂了
    只要重载一下窗体的WM_CTLCOLOR事件,然后加入如下代码即可
    //Set Static Control BackGround Transparent
    if(nCtlColor==CTLCOLOR_STATIC)
    pDC->SetBkMode(TRANSPARENT);
    return hbr;
    注意要在设计时将static的风格设为simple
      

  5.   

    pDC->SetBkMode(TRANSPARENT)就够了
      

  6.   

    重载WM_CTLCOLOR
    pDC->SetBkMode(TRANSPARENT)
      

  7.   

    重载一下窗体的WM_CTLCOLOR事件,然后加入如下代码
    pDC->SetBkMode(TRANSPARENT);
    return hbr;
    注意要在设计时将static的风格设为simple更改Static的内容时,要加InvalidateRect 对应static的位置
      

  8.   

    重载WM_CTLCOLOR,同时将static的属性设置为TRANSPARENT
    HBRUSH CDialog2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here //////////////////////
    // 静态文本控件透明
    //////////////////////
    if(pWnd->GetDlgCtrlID() == IDC_STATIC)  // 需要设置透明背景的static控件的id
     {
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(0,0,0));//此处设置字体的颜色
     
            return  HBRUSH(GetStockObject(HOLLOW_BRUSH));
     }
    ///////////////////
    // 结束添加
    ///////////////////

    // TODO: Return a different brush if the default is not desired
    return hbr;
    }