6.11 如何在编辑框中追加文本
  1. 用SetWindowText重新设置文本
  2. 用SetSel重新设置文本长度,然后用ReplaceSel替换文本的局部文本
void CDemoDlg::OnTest1() 
{
    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT);

    CString strText = _T("");

    //获得当前文本
    pEdit->GetWindowText(strText);

    strText += _T("ABC1");

    //设置追加后的文本
    pEdit->SetWindowText(strText);                    
}

void CDemoDlg::OnTest2() 
{
    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT);

    int nLength = pEdit->GetWindowTextLength();

    //选定当前文本的末端
    pEdit->SetSel(nLength, nLength);

    //l追加文本
    pEdit->ReplaceSel(_T("ABC2"));                        
}

 

6.12 如何在编辑框中实现多行显示

在每行文本结束追加空格符\r\n

CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT);

CString strText = _T("");

for (int n = 0; n < 10; n++)
{
    CString strTemp = _T("");
    strTemp.Format(_T("Line%d"), n);
    strText += strTemp;
    if (n < 10 - 1)
    {
        strText += _T("\r\n");
    }    
}

pEdit->SetWindowText(strText);

 

6.13 如何限制编辑框输入文本的长度

文本的总长度是变的,但文本的字体是变化的,所以要以总长度除以每个字符的长度

TEXTMETRIC tm;
CDC* pDC = m_ctrlEdit.GetDC();
pDC->GetTextMetrics(&tm);
m_ctrlEdit.ReleaseDC(pDC);

//获得编辑框的格式化矩形
CRect rect;
m_ctrlEdit.GetRect(&rect);

m_ctrlEdit.LimitText(rect.Width() / tm.tmAveCharWidth);

 

6.14 如何限制编辑框只能输入数字

在OnChar事件中判断输入字符的编码

void CDemoEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    //判断字符是否为数字
    if ((nChar < '0') || (nChar > '9'))
    {
        if (nChar != VK_BACK)
        {
            AfxMessageBox(_T("请输入数字。"));
            return;
        }
    }

    CEdit::OnChar(nChar, nRepCnt, nFlags);
}

 

6.15 如何将编辑框中输入的字符转换为大写(小写)

调用对应的IsCharUpper和CharUpper方法或者IsCharLower和CharLower方法,然后用DefWindowProc方法处理消息

void CDemoEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    //将字符转换为大写字符
    if (!IsCharUpper((TCHAR)nChar))
    {    
        nChar = (UINT)CharUpper((TCHAR*)nChar);
    }

//    //将字符转换为小写字符
//     if (!IsCharLower((TCHAR)nChar))
//     {
//         nChar = (UINT)CharLower((TCHAR*)nChar);
//     }

    //处理消息
    DefWindowProc(WM_CHAR, nChar, MAKELPARAM(nRepCnt, nFlags));
}