重载 WM_CTRLTEDITCOLOR消息,
返回一个非NULL的HBRUSH句柄.
可参考"VISUAL C++技术内幕(第四版)".

解决方案 »

  1.   

    可以使用消息反射的方法,在msdn中有个例子
      

  2.   

    huangbeyond,ginkgoboy
    我没找到WM_CTRLEDITCOLOR消息,根据"内幕(第五版)"重载了WM_CTLCOLOR消息,代码如下:
    (我想把背景设为黑色,文字设为白色,但我不知该如何设置文字颜色)
    HBRUSH CEditView::CtrColor(CDC* pDC, UINT nCtlColor)
    {
        HBRUSH brush;
        brush.CreateSolidBrush(RGB(0, 0, 0));
        pDC->SetBkColor(RGB(0, 0, 0));
        return (HBRUSH)brush.GetSafeHandle();
    }
    上述代码在程序启动时并没有将整个edit区的背景设为黑色,只是往edit区中添加文字后才看得出黑色背景.请问这段代码有什么问题,该如何修改?hotsun,
    不知你所说的消息反射的方法是什么方法, 例子在msdn中的什么地方.我是个刚学vc的菜鸟, 如果问题幼稚, 望各位大虾不要见笑.希望能得到大家的帮助.谢谢!
      

  3.   

    在msdn中找找这个:TN062: Message Reflection for Windows Controls
    在自己从CEdit继承来的新类中,在class wizard中可以使用消息反射的消息前面有个"="
      

  4.   

    上面的代码,(最后一句)return brush;就可以了
      

  5.   

    抱歉!!
    WM_CTRLEDITCOLOR消息是我说错了,真是不好意思。
    你那样做是对的啊!
    ginkgoboy(彝族舞曲) 说的也对。
      

  6.   

    用上面的方法(重载WM_CTLCOLOR消息),程序启动时只有第一行的背景是黑色,其余行的背景还是白色.只有当往edit中输入文本时,文本所在行的背景才变成黑色.并且文本区的最后一行背景总是白色.不知是怎么回事?
      

  7.   

    参考代码
    HBRUSH CSockDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    //HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if(nCtlColor==CTLCOLOR_LISTBOX)
    {
    pDC->SetBkMode (TRANSPARENT);
    pDC->SetTextColor (RGB(255,255,0));
    return m_hbrush;
    }
    else 
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    // TODO: Return a different brush if the default is not desired
    // return hbr;
    }
      

  8.   

    参考代码
    HBRUSH CSockDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    //HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if(nCtlColor==CTLCOLOR_LISTBOX)
    {
    pDC->SetBkMode (TRANSPARENT);
    pDC->SetTextColor (RGB(255,255,0));
    return m_hbrush;
    }
    else 
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    // TODO: Return a different brush if the default is not desired
    // return hbr;
    }
      

  9.   

    不管我怎么试, 还是程序启动时只有第一行是黑的背景, 其余都是白色背景,而且屏幕中的最后一行始终是白色,我都没辙了.
    哪位高手能费一点点时间新建一个以CEditView为View父类的工程,实际帮我做一下.我的要求并不高啊:仅仅是要程序启动时整个view区的背景是黑色而文字是白色而已!
    向各位叩首了!另外, 笨笨的问:在csdn中我如何才能给分给回答我问题的人?昨天试了一下,分数似乎给出去了,但一看还是0分.