我有在对话框上面拖了一个edit box控件,叫 IDC_STATIC_SHOW_PS_STATE,然后相应它的EN_CHANGE消息,
判断与之关联的变量的长度,然后通过长度来输出密码的强弱:void CSandBoxieRegister::OnChangeEditRegisterPs()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T(""));
UpdateData(TRUE);
int nLength = m_nRegister_Passwd.GetLength();
if (nLength <= 6)
{
SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T("密码强度:弱"));
}
else if (nLength > 6 && nLength <= 10)
{
SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T("密码强度:中"));
}
else if (nLength > 10)
{
SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T("密码强度:强"));
}
}
但是,在测试的时候,上面的字会重叠在一起,我实在想不通为什么不是单独输出某一种密码强弱,求大神救我于水深火热之中,叩拜!
判断与之关联的变量的长度,然后通过长度来输出密码的强弱:void CSandBoxieRegister::OnChangeEditRegisterPs()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T(""));
UpdateData(TRUE);
int nLength = m_nRegister_Passwd.GetLength();
if (nLength <= 6)
{
SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T("密码强度:弱"));
}
else if (nLength > 6 && nLength <= 10)
{
SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T("密码强度:中"));
}
else if (nLength > 10)
{
SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T("密码强度:强"));
}
}
但是,在测试的时候,上面的字会重叠在一起,我实在想不通为什么不是单独输出某一种密码强弱,求大神救我于水深火热之中,叩拜!
肯定是你在OnCtlColor等地方,给那个标签返回了空画刷句柄(用来达到透明效果)
当你改变标签文字的时候,系统会先用背景画刷刷一次(也就清除了之前画的内容),再画出新的文字.
但是因为你设置了背景画刷为空(NULL),之前的内容没有成功清除,自然就导致重叠在一起了!
和UpdateData没有关系
肯定是你在OnCtlColor等地方,给那个标签返回了空画刷句柄(用来达到透明效果)
当你改变标签文字的时候,系统会先用背景画刷刷一次(也就清除了之前画的内容),再画出新的文字.
但是因为你设置了背景画刷为空(NULL),之前的内容没有成功清除,自然就导致重叠在一起了! 版主说得对!是透明的事!你可以刷新父窗口的指定区域,就可以解决!InvalidateRect();就可以解决
http://bbs.csdn.net/topics/390401008