请大虾们将listctrl表头的背景色及字体颜色的方法给小弟详细的列一下
本人初学,请大家多关照
还有static的背景色怎么只能改一小块显示部分
有改整个static的颜色的方法吗

解决方案 »

  1.   

    控件背景色一般就是WM_CTLCOLOR消息吧, 至于static的整个背景色, 我想你只有派生一个自己的类重载OnPaint了, 那么这样对应的你就需要一个内部成员保存文本属性, 总之自己管理文本和显示了.
      

  2.   

    用CLASSWAZARD时可以重载很多函数和实现各种消息的函数,实现一个WM_CTLCOLOR的消息,
    内部用FONT等结构类等。
    关键你要学VC就得安装MSDN,里面有超多的帮助
      

  3.   

    HBRUSH CMFC2Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    // pDC->SetBkMode(TRANSPARENT);
    // TODO: Change any attributes of the DC here
    if( pWnd->GetDlgCtrlID() == IDC_STATIC1)
    {
    pDC->SetBKColor(RGB(0,0,255));
    /* CBrush mBrush;
    mBrush.CreateSolidBrush(RGB(0,0,0));
    */
    }

        //TODO: Return a different brush if the default is not desired
    return hbr;
    }
    两位老大这个我知道
    有没有详细点的程序呀
    我弄不出来啊
      

  4.   

    void CStaticColorDlg::OnPaint() 
    {
    CWnd *pWnd=GetDlgItem(IDC_STATIC1);
    CDC *pCtrDC=pWnd->GetDC();
    pWnd->Invalidate();
    pWnd->UpdateWindow();
    pCtrDC->SelectStockObject(BLACK_BRUSH);
    CRect rect;
    pWnd->GetWindowRect(&rect);
    pCtrDC->Rectangle(0,0,rect.Width(),rect.Height());
    pWnd->ReleaseDC(pCtrDC);
    }
      

  5.   

    /*===========================================================================
    ====                                                                     ====
    ====    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
      

  6.   

    /*===========================================================================
    ====                                                                     ====
    ====    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);    
    }
      

  7.   

    void CStaticColorDlg::OnPaint() 
    {
    CWnd *pWnd=GetDlgItem(IDC_STATIC1);
    CDC *pCtrDC=pWnd->GetDC();
    pWnd->Invalidate();
    pWnd->UpdateWindow();
    pCtrDC->SelectStockObject(BLACK_BRUSH);
    CRect rect;
    pWnd->GetWindowRect(&rect);
    pCtrDC->Rectangle(0,0,rect.Width(),rect.Height());
    pWnd->ReleaseDC(pCtrDC);
    }为什么我用了这段程序后静态框整个都变色了
    可是却不能显示文本了呢
    还请这位大哥给指点一下
      

  8.   

    pDC->SetTextColor(RGB(0xFF, 0, 0));//设置字体颜色
      

  9.   

    static的问题解决了
    还有listctrl表头的问题怎么弄啊
    大虾们
    指点迷津啊
      

  10.   

    在OnInitDialog里面
    m_brush.CreateSolidBrush(RGB(0,0,0));HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here

    // TODO: Return a different brush if the default is not desired
    if (pWnd->GetDlgCtrlID() == IDC_RESULT)
    {
    // Set the text color to red
    pDC->SetTextColor(RGB(255, 255, 0));
    pDC->SetBkColor(RGB(0,0,0));
    // Return handle to our CBrush object

    hbr = (HBRUSH)m_brush;
    }

    return hbr;
    }
      

  11.   

    GetHeadCtrl()獲得表頭,
    然后用SetWindowLong(m_wndListCtrl.GetHeadCtrl().m_hWnd,GWL_WNDPROC,WndProc)中,
    再改吧!