有两个编辑框,我想手动改变他们的文本颜色:
HBRUSH CColorEditView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == m_editID && nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetTextColor(m_color);
pDC->SetBkColor(RGB(255,255,255));
pDC->SetBkMode(TRANSPARENT);
m_brMine = ::CreateSolidBrush(RGB(255,255,255));
return m_brMine;
} return hbr;
}然后通过一下函数动态改变:
void CColorEditView::OnButton5()
{
m_editID = IDC_EDIT1;
m_color = RGB(255,0,0);
GetDlgItem(m_editID)->Invalidate();    ---1 m_editID = IDC_EDIT2;
m_color = RGB(255,0,0);
GetDlgItem(m_editID)->Invalidate();    ---2
}
这个函数是想把两个编辑框文本颜色都改成红色,但结果是第一个是黑颜色,第二个是红色;后来我把1、2两部分代码分别用两个按钮实现,结果两个都可以变成红色,请问这是为什么?百思不得其解,请大家帮帮忙!

解决方案 »

  1.   

    m_brMine = ::CreateSolidBrush(RGB(255,255,255)); 
    return m_brMine; 
    这样的代码,够垃圾的啊。你准备创建多少次啊???
      

  2.   

    在OnButton5() 中设置参数。在
    HBRUSH CColorEditView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    中,根据参数改变颜色.
      

  3.   

    我就是这么做的啊!m_color是文本颜色,m_editID是编辑框ID,在OnButton5()中设置了,但运行结果却不对
      

  4.   


    你点btn5的时候1,2顺序执行下来。执行完了之后,CColorEditView::OnCtlColor才执行,这个时候m_editID = IDC_EDIT2;,所以当然只有edit2颜色变了。
    这种情况执行OnBtn1 后 执行一次 CColorEditView::OnCtlColor  (m_editID = IDC_EDIT1)
               ~~~2 再 ~~~~~~~~~~~~~~~~~~~ (m_editID = IDC_EDIT2)
    所以两个的颜色都变了
      

  5.   


    同意void CColorEditView::OnButton5() 

    m_editID = IDC_EDIT1; 
    m_color = RGB(255,0,0); 
    GetDlgItem(m_editID)->Invalidate();    ---1 GetDlgItem(m_editID)->SetFocus();  //加这句m_editID = IDC_EDIT2; 
    m_color = RGB(255,0,0); 
    GetDlgItem(m_editID)->Invalidate();    ---2 
    } 这样可以实现2个文本框都变色
      

  6.   

    void CColorEditView::OnButton5() 

    m_editID = IDC_EDIT1; 
    m_color = RGB(255,0,0); 
    //GetDlgItem(m_editID)->Invalidate();    去掉GetDlgItem(m_editID)->SetFocus();  //加这句 m_editID = IDC_EDIT2; 
    m_color = RGB(255,0,0); 
    GetDlgItem(m_editID)->SetFocus();  //加这句 
    //GetDlgItem(m_editID)->Invalidate();    去掉
    } 这样做不是太好,具体原因我我说不大清楚
      

  7.   

    原因我明白了,但是加上了GetDlgItem(m_editID)->SetFocus(); 这句还是不能实现颜色都改变
      

  8.   

    这么做 2个文本框都有字的话 可以改变颜色如果  IDC_EDIT1 要从新编辑的话 又变回黑色了还是换种方法吧,这样只能永久改变一个文本框的颜色
    多加个if语句吧
      

  9.   

    if(pWnd->GetDlgCtrlID() == 1) 

    pDC->SetTextColor(m_color); 
    pDC->SetBkColor(RGB(255,255,255)); 
    pDC->SetBkMode(TRANSPARENT); 
    m_brMine = ::CreateSolidBrush(RGB(255,255,255)); 

    else if(pWnd->GetDlgCtrlID() == 2) 

    pDC->SetTextColor(m_color); 
    pDC->SetBkColor(RGB(255,255,255)); 
    pDC->SetBkMode(TRANSPARENT); 
    m_brMine = ::CreateSolidBrush(RGB(255,255,255)); 

    return m_brMine;