请问怎么样处理:
当得到焦点时Edit的背景色变成蓝色
失去焦点时Edit的背景色变成白色?
把过程写下来,我运行出来的一定给分!
8 个解决方案
#1
这个难道没人会吗?
#2
这个问题还没搞定吗?其实我不能帮你写整个过程,只能告诉你方法,否则你也太不劳而获了.
1. 改变背景色的画刷在OnctlColor(),你必须重载它,其实这一点你也知道;此外,你须设置一布尔变量,每当获得焦点与失去焦点时,你必须要使这个函数起作用,即重绘,而且画刷是不同的颜色.
2. 实在不行,你就把对象的属性设置为自己绘制,这样你不得不自己绘背景,我想更麻烦
1. 改变背景色的画刷在OnctlColor(),你必须重载它,其实这一点你也知道;此外,你须设置一布尔变量,每当获得焦点与失去焦点时,你必须要使这个函数起作用,即重绘,而且画刷是不同的颜色.
2. 实在不行,你就把对象的属性设置为自己绘制,这样你不得不自己绘背景,我想更麻烦
#3
我做了一个demo,把你的email给我,我给你发过出.
#4
头文件中定义各变量:
HBRUSH m_hBlueBrush;
HBRUSH m_hWhiteBrush;
BOOL flag;
CWnd* pCurWnd;
对话框OnInitDialog()中创建刷子,变量初始化:
m_hBlueBrush = CreateSolidBrush(RGB(0,0,255));
m_hWhiteBrush = CreateSolidBrush(RGB(255,255,255));
flag = FALSE;
pCurWnd = GetDlgItem(IDC_EDIT1);
SetTimer(100,100,NULL);//设置定时器
HBRUSH CDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
if (flag)
{
return m_hBlueBrush;
}
else
{
return m_hWhiteBrush;
}
}
return hbr;
}
BOOL CDlgDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
if (m_hBlueBrush)
{
DeleteObject(m_hBlueBrush);
m_hBlueBrush = NULL;
}
if (m_hWhiteBrush)
{
DeleteObject(m_hWhiteBrush);
m_hWhiteBrush = NULL;
}
KillTimer(100);
return CDialog::DestroyWindow();
}
void CDlgDlg::OnTimer(UINT nIDEvent)
{
if (pCurWnd == (this->GetFocus()))
{
flag = TRUE;
}
else
{
flag = FALSE;
}
pCurWnd->InvalidateRect(NULL);
pCurWnd->UpdateWindow();
CDialog::OnTimer(nIDEvent);
}
HBRUSH m_hBlueBrush;
HBRUSH m_hWhiteBrush;
BOOL flag;
CWnd* pCurWnd;
对话框OnInitDialog()中创建刷子,变量初始化:
m_hBlueBrush = CreateSolidBrush(RGB(0,0,255));
m_hWhiteBrush = CreateSolidBrush(RGB(255,255,255));
flag = FALSE;
pCurWnd = GetDlgItem(IDC_EDIT1);
SetTimer(100,100,NULL);//设置定时器
HBRUSH CDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
if (flag)
{
return m_hBlueBrush;
}
else
{
return m_hWhiteBrush;
}
}
return hbr;
}
BOOL CDlgDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
if (m_hBlueBrush)
{
DeleteObject(m_hBlueBrush);
m_hBlueBrush = NULL;
}
if (m_hWhiteBrush)
{
DeleteObject(m_hWhiteBrush);
m_hWhiteBrush = NULL;
}
KillTimer(100);
return CDialog::DestroyWindow();
}
void CDlgDlg::OnTimer(UINT nIDEvent)
{
if (pCurWnd == (this->GetFocus()))
{
flag = TRUE;
}
else
{
flag = FALSE;
}
pCurWnd->InvalidateRect(NULL);
pCurWnd->UpdateWindow();
CDialog::OnTimer(nIDEvent);
}
#5
怎么还不给我消息,我的电话:(010)65057801-2208
#6
呵呵。 大家说得对,hand一下
#7
同意legerwu(Leger),应该比 freelybird(阿愚) 做的容易些。
但 freelybird(阿愚) 的也可以实现。
但 freelybird(阿愚) 的也可以实现。
#8
legerwu(leger)做得不够优美,效率也不高,应该子类化.我已实现,很简单的,不超过8条语句
#1
这个难道没人会吗?
#2
这个问题还没搞定吗?其实我不能帮你写整个过程,只能告诉你方法,否则你也太不劳而获了.
1. 改变背景色的画刷在OnctlColor(),你必须重载它,其实这一点你也知道;此外,你须设置一布尔变量,每当获得焦点与失去焦点时,你必须要使这个函数起作用,即重绘,而且画刷是不同的颜色.
2. 实在不行,你就把对象的属性设置为自己绘制,这样你不得不自己绘背景,我想更麻烦
1. 改变背景色的画刷在OnctlColor(),你必须重载它,其实这一点你也知道;此外,你须设置一布尔变量,每当获得焦点与失去焦点时,你必须要使这个函数起作用,即重绘,而且画刷是不同的颜色.
2. 实在不行,你就把对象的属性设置为自己绘制,这样你不得不自己绘背景,我想更麻烦
#3
我做了一个demo,把你的email给我,我给你发过出.
#4
头文件中定义各变量:
HBRUSH m_hBlueBrush;
HBRUSH m_hWhiteBrush;
BOOL flag;
CWnd* pCurWnd;
对话框OnInitDialog()中创建刷子,变量初始化:
m_hBlueBrush = CreateSolidBrush(RGB(0,0,255));
m_hWhiteBrush = CreateSolidBrush(RGB(255,255,255));
flag = FALSE;
pCurWnd = GetDlgItem(IDC_EDIT1);
SetTimer(100,100,NULL);//设置定时器
HBRUSH CDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
if (flag)
{
return m_hBlueBrush;
}
else
{
return m_hWhiteBrush;
}
}
return hbr;
}
BOOL CDlgDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
if (m_hBlueBrush)
{
DeleteObject(m_hBlueBrush);
m_hBlueBrush = NULL;
}
if (m_hWhiteBrush)
{
DeleteObject(m_hWhiteBrush);
m_hWhiteBrush = NULL;
}
KillTimer(100);
return CDialog::DestroyWindow();
}
void CDlgDlg::OnTimer(UINT nIDEvent)
{
if (pCurWnd == (this->GetFocus()))
{
flag = TRUE;
}
else
{
flag = FALSE;
}
pCurWnd->InvalidateRect(NULL);
pCurWnd->UpdateWindow();
CDialog::OnTimer(nIDEvent);
}
HBRUSH m_hBlueBrush;
HBRUSH m_hWhiteBrush;
BOOL flag;
CWnd* pCurWnd;
对话框OnInitDialog()中创建刷子,变量初始化:
m_hBlueBrush = CreateSolidBrush(RGB(0,0,255));
m_hWhiteBrush = CreateSolidBrush(RGB(255,255,255));
flag = FALSE;
pCurWnd = GetDlgItem(IDC_EDIT1);
SetTimer(100,100,NULL);//设置定时器
HBRUSH CDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
if (flag)
{
return m_hBlueBrush;
}
else
{
return m_hWhiteBrush;
}
}
return hbr;
}
BOOL CDlgDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
if (m_hBlueBrush)
{
DeleteObject(m_hBlueBrush);
m_hBlueBrush = NULL;
}
if (m_hWhiteBrush)
{
DeleteObject(m_hWhiteBrush);
m_hWhiteBrush = NULL;
}
KillTimer(100);
return CDialog::DestroyWindow();
}
void CDlgDlg::OnTimer(UINT nIDEvent)
{
if (pCurWnd == (this->GetFocus()))
{
flag = TRUE;
}
else
{
flag = FALSE;
}
pCurWnd->InvalidateRect(NULL);
pCurWnd->UpdateWindow();
CDialog::OnTimer(nIDEvent);
}
#5
怎么还不给我消息,我的电话:(010)65057801-2208
#6
呵呵。 大家说得对,hand一下
#7
同意legerwu(Leger),应该比 freelybird(阿愚) 做的容易些。
但 freelybird(阿愚) 的也可以实现。
但 freelybird(阿愚) 的也可以实现。
#8
legerwu(leger)做得不够优美,效率也不高,应该子类化.我已实现,很简单的,不超过8条语句