请问哪位高手能告诉我改变list control控件背景颜色的代码,对于setbkcolor()这个函数我试过了但是程序运行就出错,请大家帮帮忙

解决方案 »

  1.   

    WM_CTLCOLOR --> OnCtlColor 试试
      

  2.   

    谢谢,上面这位我试过了,你说的那个不能改变list control控件它能改变list box
      

  3.   

    对于setbkcolor()这个函数我试过了但是程序运行就出错
    ---------------------------------------------------------
    报什么错。
      

  4.   

    对消息WM_CTLCOLOR进行响应
    HBRUSH CDlgFlash::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
             HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if (pWnd->GetDlgCtrlID() == IDD_LISTBOXID)   //IDD_LISTBOXID改为listcontrol的ID
    {
    B = CreateSolidBrush(RGB(255,0,0)); //红色
    return (HBRUSH) B;
    } // TODO: Return a different brush if the default is not desired
    return hbr;
    }
      

  5.   

    感谢几位,我试过用楼上这位的代码,但是改变不了颜色,所以我就在msdn里查到setbkcolor()这个函数,我用pDC指针指向list control控件的id,然后调用这个函数,运行时系统就报错,是系统错误,不知道是不是代码写的有问题.
      

  6.   

    在OnInitDialog里直接用listcontrol的控制变量调用setbkcolor()试试
      

  7.   

    自绘LISTCONTROL
    要什么背景都可以
    WM_DRAWITEM.....
    背景用BITMAP都行
      

  8.   

    是这样的,我在OnInitDialog()里面添加了下面这两行代码:其中变量m_ColorHJName和m_list是在这个Dialog的头文件里定义的。
    m_ColorHJName=RGB(0,0,0);
    m_list.SetBkColor(m_ColorHJName);
    程序运行后就会弹出一个错误对话框,上面写着
    Debug Assertion Failed!
    Program:F\Display\Debug\DIsplay.exe
    File:afxcmn.inl
    Line:126
    ......
    我觉的这是系统错误信息,一般如果数据传递有问题就会出现这样的错误对话框,上面几位给我的建议我都试过了,弹出的都是这个错误,我知道用setbkcolor()这个函数可以改变颜色,但是具体用法不知道,如果有那位高手用过请快来帮帮我,谢谢
      

  9.   

    试一下对m_list.GetSafeHwnd()作判断。
      

  10.   

    谢谢上面的楼主,我用了m_list.GetSafeHwnd()做判断,然后把m_list.SetBkColor(m_ColorHJName);放在if判断体里
    那个错误对话框是没有了,可是颜色还是没有变,因为m_list.GetSafeHwnd()这个值是空,加了这个判断后就不执行m_list.SetBkColor(m_ColorHJName);这条语句了,如果还是想要执行这条语句就还是我上面说的那个错误,所以我认为还是这个函数用的不对,这个问题真的很难吗?
      

  11.   

    你的用法是没有错的,
    我想抱错的原因应该是你listctrl属性设置有问题
    你检查一下Owner Draw Fixed为假时才可以应用SetBkColor
      

  12.   

    你是不是没有绑定控件?你这个变量是通过向导添加的控件绑定变量吗?看看DoDataExchange()里面有没有这个变量绑定的代码?比如:
    DDX_Control(pDX, IDC_LIST, m_list);
    之类的。另外,看看SetBkColor的返回值。
      

  13.   

    给段代码你看看,希望对你有帮助。HBRUSH CSoftDogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        static HBRUSH hbrNULL = (HBRUSH)GetStockObject(NULL_BRUSH);    // TODO: Change any attributes of the DC here
        switch (pWnd->GetDlgCtrlID())
        {
            case IDC_INFO:
            
            hbrNULL = (HBRUSH)GetStockObject(NULL_BRUSH);
            pDC->SetTextColor(RGB(0xff,0x00,0x66));
            pDC->SetBkColor(RGB(156, 209, 241));
            hbr =  hbrNULL;
            break ;
        }    // TODO: Return a different brush if the default is not desired
        return hbr;
    }
      

  14.   

    代码我试过了,不能改变颜色,程序根本不执行case下面的语句。代码中的IDC_INFO指的是ListControl控件的ID是吗。我认为不能在onctlcolor这个函数里编写代码来改变ListControl控件背景颜色,因为我查过了这个函数针对的控件没有ListControl控件,它对listbox控件可以而且我也试过了,这样程序找不到它可以控制的控件所以根本不执行case下面的语句,所以在这个函数里是不能实现的,不知道我说清楚没,我要再强调一下是listcontrol控件的背景颜色。这个问题这么长时间还没有解决办法,难道真的很难吗,我觉得vc在界面上太笨拙了,很多都需要编写代码来实现,像delphi、vb只要改变控件的属性就可以达到想要的任何效果,不知道vc什么时候能让我们程序员在编写界面时省点力气,还是希望大家继续帮忙。
      

  15.   

    我说过了,你的方法没错。
    改listctrl的背景色我做过,
    我想很多人也都做过,
    就是这样的方法。
    你检查一下listctrl的设置,
    看看存不存在Mackz(在相互)所说的问题。
    实在不行你把工程发我邮箱,
    我给你看看
    [email protected]
      

  16.   


    检查下有没有这些代码COLORREF m_color;CListCtrl m_Infolist; DDX_Control(pDX, IDC_INFOLIST, m_Infolist);m_color = RGB(0,0,0);m_Infolist.SetBkColor(m_color);  有这几句,背景色一定可以改变的
      

  17.   

    我试了,结果程序运行弹出下面的错误对话框:Display.exe遇到问题需要关闭,我们对此引起的不变表示抱歉。
    如果你正处在进程当中,信息有可能丢失。
    关于次错误的其它信息,请单击此处。我就是把下面几段代码写在了InitDialog()函数里了,然后在这个Dialog的头文件里定义的COLORREF m_color;CListCtrl m_Infolist;开始程序不认pDX这个变量,我查了一下msdn,然后又在头文件里定义了这个pDX,然后编译没错,运行就弹出上面的对话框,请大家看看吧DDX_Control(pDX, IDC_INFOLIST, m_Infolist);m_color = RGB(0,0,0);m_Infolist.SetBkColor(m_color);  
      

  18.   

    DDX_Control(pDX, IDC_INFOLIST, m_Infolist);
    这句话是加载DoDataExchange里的