有两个编辑框,我想手动改变他们的文本颜色:
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两部分代码分别用两个按钮实现,结果两个都可以变成红色,请问这是为什么?百思不得其解,请大家帮帮忙!
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两部分代码分别用两个按钮实现,结果两个都可以变成红色,请问这是为什么?百思不得其解,请大家帮帮忙!
解决方案 »
- 2012 散分帖子 -===- 分不多全部赞RP
- 句柄问题
- 在线急等 :用vc++6.0的mscomm控件做的串口通信程序,為什么在沒有安裝vc的机器无法运行.
- 高分求解:用picturebox作视频播放控件,在VC的测试容器内可以运行,但是该ocx在网页中就不能看视频了?
- 多声卡控制问题?
- 各位大侠...救命啊!!!
- 怎样获取当前视图?
- ijl1.5将内存中的位图专成jpeg文件出现不正常现象
- VC OLE WORD ,WORD破坏原程序框架!
- 我一个好友现在需要将AUTOCAD 中的DXF文件转化为PLT文件的相关的资料,清大家帮忙了。
- 问一个SOCKET读数据时碰到的非常简单的奇怪问题
- 如何访问局域网内其他计算机的文件
return m_brMine;
这样的代码,够垃圾的啊。你准备创建多少次啊???
HBRUSH CColorEditView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
中,根据参数改变颜色.
你点btn5的时候1,2顺序执行下来。执行完了之后,CColorEditView::OnCtlColor才执行,这个时候m_editID = IDC_EDIT2;,所以当然只有edit2颜色变了。
这种情况执行OnBtn1 后 执行一次 CColorEditView::OnCtlColor (m_editID = IDC_EDIT1)
~~~2 再 ~~~~~~~~~~~~~~~~~~~ (m_editID = IDC_EDIT2)
所以两个的颜色都变了
同意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个文本框都变色
{
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(); 去掉
} 这样做不是太好,具体原因我我说不大清楚
多加个if语句吧
{
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;