vc 设置编辑框的颜色???

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc 设置编辑框的颜色???相关的知识,希望对你有一定的参考价值。

现在有两个文本编辑框
ID号为IDC_NUM1 , IDC_NUM2
关联的变量是m_num1 , m_num2 。变量类型为 Cstring
我想让
当m_num1为“pass”时 这个编辑框的颜色为绿色,为“fail”时编辑框的颜色为红色
m_num2也是一样的
谁能帮帮我啊
写些代码什么的
帮帮我啊

这是改变IDC_NUM1 编辑框背景色的例子,另外一个你自己弄吧:
HBRUSH CDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_EDIT)

LONG wndID=::GetWindowLong(pWnd->GetSafeHwnd(),GWL_ID);//获取窗口ID if(wndID==IDC_NUM1) CString EditBoxTxt; pWnd->GetWindowText(EditBoxTxt); if(EditBoxTxt==“pass") pDC->SetBkMode(TRANSPARENT);//设置文字背景透明(注意区分文字背景和窗口背景)
pDC->SetBkColor(BkColor); //设置文字背景,如果设置文字背景透明则这一句不起作用
pWnd->GetClientRect(rcClientRect);
CBrush br1(BkColor);//这里BkColor就是编辑框背景色,我在别的地方定义了BkColor并设置这
//个值
pDC->FillRect(rcClientRect,&br1);//通过填充的方式改变编辑框背景色

// TODO: Return a different brush if the default is not desired
return hbr;
追问

HBRUSH CDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
这个写
在哪里呢??

追答

这是对话框的消息函数,按照添加对话框消息函数的方法添加就是了。

追问

我添加了wm_color后

我的程序原来对的地方报错是怎么回事啊??

我是一个关于串口通信的程序,对串口上接收缓存有东西的话是实时接收的

加了之后下面这段报错

 

BEGIN_EVENTSINK_MAP(CMmDlg, CDialog)

//AFX_EVENTSINK_MAP(CComaDlg)

ON_EVENT(CMmDlg, IDC_MSCOMM1, 1 /* OnComm */, OnOnComm, VTS_NONE)

//AFX_EVENTSINK_MAP

END_EVENTSINK_MAP()

追答

怎么可能,你是用向导添加的吗?向导添加不可能有问题的。

追问

我的串口通信的这段代码
BEGIN_EVENTSINK_MAP(CMmDlg, CDialog)
//AFX_EVENTSINK_MAP(CComaDlg)
ON_EVENT(CMmDlg, IDC_MSCOMM1, 1 /* OnComm */, OnOnComm, VTS_NONE)
//AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
是手工添加的

追答

你既然添加了,为什么没有看见消息映射,而且应该加的是WM_CTLCOLOR消息消息响应函数,用向导添加,不用手动添加

追问

WM_CTLCOLOR我是想到添加的

我串口通信的这段代码

是手工添加的

追答

我添加后会有消息映射如下:
BEGIN_MESSAGE_MAP(CDlgDlg, CDialog)
//AFX_MSG_MAP(CDlgDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_SelColor, OnSelColor)
//AFX_MSG_MAP
END_MESSAGE_MAP()
其中 ON_WM_CTLCOLOR()就是我用向导添加的消息映射
可你的没有呀

追问

也是有的啊

我那个报错的是串口通信的 事件

追答

这是两个不相干的事情呀,用向导添加一个消息函数怎么会影响到串口部分?

参考技术A 添加OnCtlColor方法,大体实现:
HBRUSH CDLLinjectDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

//HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
HBRUSH m_brMine;
m_brMine = ::CreateSolidBrush(RGB(0,0,0));
// TODO: Change any attributes of the DC here
if (nCtlColor==CTLCOLOR_EDIT&&m_m_num1==“pass”)


pDC->SetBkColor(RGB(0,0,0));//背景颜色值
pDC->SetTextColor(RGB(255,0,0));//文本颜色值
pDC->SetBkMode(TRANSPARENT);
return m_brMine;

// TODO: Return a different brush if the default is not desired
return m_brMine;

如果不能实时变,估计还得用定时器,你先试试吧,不行再Hi我追问

我hi你了~

追答

什么问题?不行吗?

以上是关于vc 设置编辑框的颜色???的主要内容,如果未能解决你的问题,请参考以下文章

VC中编辑框更新SetDlgItemText()与UpdateData()的区别

MFC:如何更改整个编辑框的背景颜色?

qtcombobox的背景颜色越过下拉

在 MFC 中运行时更改编辑框属性

在 GridView 中编辑行时如何设置文本框的宽度?

UIImagePickerController的编辑模式怎么设置裁剪框的大小或形状