首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC SetWindowText(.)促成的死循环

2013-03-25 
MFC SetWindowText(...)造成的死循环本帖最后由 lefter1986 于 2013-01-29 17:31:58 编辑我在Visual Studi

MFC SetWindowText(...)造成的死循环
本帖最后由 lefter1986 于 2013-01-29 17:31:58 编辑 我在Visual Studio 2008下编写了一个MFC对话框,


void CDlgTest::OnEnChangeEdtName()
{
    CString strName;
    m_edtName.GetWindowText(strName);   //  m_edtName是一个CEdit控件变量。

    if (0 != strName.CompareNoCase(_T("Mike")))
    {
        AfxMessageBox(_T("您输入的不是Mike,程序会自动帮您设置。"));
        m_edtName.SetWindowText(_T("Mike"));
    }

    /* 首先为这个愚蠢的例子向大家道歉。
    简单解释一下:这是一个MFC的对话框里类,对话框上有一个CEdit控件。
    该函数是上述CEdit控件的编辑响应函数。

    当m_edtName.SetWindowText(_T("Mike"));被调用的时候,本函数会被调用,
    而本函数被调用又会导致m_edtName.SetWindowText(_T("Mike"));被调用,从而形成了死循环,
    不断地弹出AfxMessageBox(_T("您输入的不是Mike,程序会自动帮您设置。"));这个提示。
    问题是:如何在不改变程序逻辑的情况下,切断该死循环,
    比如m_edtName.SetWindowText(_T("Mike"));被执行的时候,不调用本函数。
    */
}


谢谢大家。
[解决办法]
if (0 != strName.CompareNoCase(_T("Mike")) && bCompare == false)
    {
        AfxMessageBox(_T("您输入的不是Mike,程序会自动帮您设置。"));
        m_edtName.SetWindowText(_T("Mike"));
    }
 bCompare 判断是不是比较过

避免重复比较


[解决办法]
需要清楚OnEnChangeEdtName的触发条件,这种情况下使用这个函数是不行的

热点排行