我有在对话框上面拖了一个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("密码强度:强"));
}
}
但是,在测试的时候,上面的字会重叠在一起,我实在想不通为什么不是单独输出某一种密码强弱,求大神救我于水深火热之中,叩拜!

解决方案 »

  1.   

    不会出现你那种情况啊,我在VC6上测试是单独显示,不会重叠,不过我去掉了第一句的SetDlgItemText(IDC_STATIC_SHOW_PS_STATE,_T(""));
      

  2.   

    你用了UpdateData(TRUE);应该是不会重叠的,每次进该方法的时候都会为你刷新下所有控件
      

  3.   

    在最后面添加个UpdateData(TRUE);试试?
      

  4.   

    和UpdateData没有关系
    肯定是你在OnCtlColor等地方,给那个标签返回了空画刷句柄(用来达到透明效果)
    当你改变标签文字的时候,系统会先用背景画刷刷一次(也就清除了之前画的内容),再画出新的文字.
    但是因为你设置了背景画刷为空(NULL),之前的内容没有成功清除,自然就导致重叠在一起了!
      

  5.   

    回复于: 2013-03-22 13:28:50 
    和UpdateData没有关系
    肯定是你在OnCtlColor等地方,给那个标签返回了空画刷句柄(用来达到透明效果)
    当你改变标签文字的时候,系统会先用背景画刷刷一次(也就清除了之前画的内容),再画出新的文字.
    但是因为你设置了背景画刷为空(NULL),之前的内容没有成功清除,自然就导致重叠在一起了! 版主说得对!是透明的事!你可以刷新父窗口的指定区域,就可以解决!InvalidateRect();就可以解决
      

  6.   

    标签背景透明以及文字重叠问题解决方法
    http://bbs.csdn.net/topics/390401008