怎样改变编辑框的背景颜色?

kokosoft 2004-07-21 09:38:26
请问怎么实现当编辑框获得焦点(光标放进去)时改变该编辑框的背景颜色?在线等待。。。谢谢!
...全文
352 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
winthegame 2004-07-21
  • 打赏
  • 举报
回复
方法1,按照上面方式,再结合View类中Edit的消息SetFoucs,KillFoucs来修改 刷子颜色。缺点是针对多个对话框很麻烦。
方法2,重载CEdit类,在SetFoucs,KillFoucs消息中修改父类Brush刷子,很简单,但由于父子关系紧密,耦合性太强,不推荐。
3,重载CEdit类,在OnPaint中自画自定义颜色,在SetFoucs,KillFoucs消息中修改颜色,方法最好,但考虑因素太多,编码相对繁琐,但其内聚性最好。
kokosoft 2004-07-21
  • 打赏
  • 举报
回复
上面这位兄弟,可以说具体一点吗?就这样怎么行呢?
cxlxormfc 2004-07-21
  • 打赏
  • 举报
回复
HBRUSH CCheckWork_Leave_View::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
return HBRUSH(你想要得颜色));
}
kokosoft 2004-07-21
  • 打赏
  • 举报
回复
lixiaosan(小三)和 sasa_sasa(近猪者吃-近我者黑) ,可以帮忙帮到底吗?继续等待各位仁侠的回复ing...
北京迅哥 2004-07-21
  • 打赏
  • 举报
回复
..............换denphi吧,简单 -_-!!
kokosoft 2004-07-21
  • 打赏
  • 举报
回复
等待回复ing..........
kokosoft 2004-07-21
  • 打赏
  • 举报
回复
To lixiaosan(小三):
这种方法我用过,但有一点问题,也就是我上面给 sasa_sasa(近猪者吃-近我者黑) 回复时提到的那个问题。只能改变编辑框上面一部分(约一半)的颜色,而其下面部分却改变不了!我不知道是什么原因。你可以做一个测试试一下,帮我解决一下吗?万分感谢!!
lixiaosan 2004-07-21
  • 打赏
  • 举报
回复
HBRUSH CTest6Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(nCtlColor)
{
case CTLCOLOR_EDIT:
if(pWnd->GetDlgCtrlID() == IDC_EDIT2)
{
if(GetFocus() == (CEdit*)GetDlgItem(IDC_EDIT2))
{
static HBRUSH hbrEdit = ::CreateSolidBrush( RGB(255, 0, 0) );
pDC->SetBkColor( RGB(255, 0, 0) );
pDC->SetTextColor( RGB(0, 255, 0) );
return hbrEdit;
}
}
}

// TODO: Return a different brush if the default is not desired
return hbr;
}
kokosoft 2004-07-21
  • 打赏
  • 举报
回复
sasa_sasa(近猪者吃-近我者黑) :
你这种方法我用了,可是有问题,可能是pDC指针有问题吧,直接使用这个pDC时只能改变编辑框上面一部分(约一半)的颜色,下面部分却改变不了。我自己在if中写代码:
CEdit* pDC2=(CEdit*)GetDlgItem(IDC_EIDT1);
CDC pDC3=pDC2->GetWindowDC()(GetDC我也试过)
pDC3->SetBkColor(RGB(255,0,0));
如果这样的话,却一点反应都没有!我不知道为什么,请高手指教,谢谢!!
lixiaosan(小三):
请问怎么重载呢?可以说详细一点吗?最好写一下相关代码,谢谢!
lixiaosan 2004-07-21
  • 打赏
  • 举报
回复
重载CEdit,判断当鼠标光标在cedit控件范围内时,设置颜色
sasa_sasa 2004-07-21
  • 打赏
  • 举报
回复
HBRUSH CCheckWork_Leave_View::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

if(nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetBkMode(TRANSPARENT); //设置背景透明
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}

return hbr;
}
kokosoft 2004-07-21
  • 打赏
  • 举报
回复
怎么没有人回答呢?热心的盟友呢?WAITING。。。。。。。。。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧