龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用递归算法解决VC中CEdit的一个Bug(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
解决问题的算法 针对以上存在的问题,在取得编辑框的内容后,可以使用递归算法来过滤掉相关输入。 算法思想: 从第一行开始,以回车换行为一次递归

  解决问题的算法

  针对以上存在的问题,在取得编辑框的内容后,可以使用递归算法来过滤掉相关输入。

  算法思想:

  从第一行开始,以回车换行为一次递归调用,把每次的结果加起来。递归的思路是:根据每行最大的字符数,对每行进行判断,如果最后一个字符是空格,则把那个空格删除,最后,把不需要的空格都删除掉了。调用程序如下:

CString strText, strObjText, strExchange;
CEdit *pEdit;
UpdateWindow();
pEdit = (CEdit *)GetDlgItem(IDC_ET_CON);

int nPos = 0, nLen = 0;
int nMaxCols = 20;
strObjText = "";
pEdit->GetWindowText(strText);
nPos = strText.Find(" ");
while(nPos != -1)
{
 strExchange = strText.Left(nPos);
 strText = strText.Right(strText.GetLength() - nPos -2);
 TrimEndNull(nMaxCols, strExchange, nMaxCols);
 strObjText = strObjText + strExchange + " ";
 nPos = strText.Find(" ");
}
strExchange = strText;
TrimEndNull(nMaxCols, strExchange, nMaxCols);
strObjText = strObjText + strExchange;
pEdit->SetWindowText(strObjText);
UpdateWindow();

  递归函数如下:

TrimEndNull(int nPos, CString &strExchange, const int nMaxCols)
{
 if (nPos >= strExchange.GetLength())
  return;
 if (strExchange.GetAt(nPos) == ' ')
 {
  strExchange = strExchange.Left(nPos) +
  strExchange.Right(strExchange.GetLength() - nPos - 1);
 }
 nPos = nPos + nMaxCols;
 TrimEndNull(nPos, strExchange, nMaxCols);
}

  现在程序运行结果如下:

  原始输入

  替换后

  输入A,B后,能够输满编辑框

  结束语

  本文主要讨论了解决VC++中的CEdit控件的一个Bug,使用了大家熟习的递归算法,通过对这个Bug的分析,使用递归算法后,这个难于解决的问题就变得很简单了。

精彩图集

赞助商链接