Visual c++ 发生换行的CEdit索引

Visual c++ 发生换行的CEdit索引,visual-c++,mc,Visual C++,Mc,我正在从CEdit控件获取文本。我需要在图像上模仿相同的文字。编辑控件是多行的,所以当我继续键入长字符串时,单词的剩余部分将转到下一行。 我不知道字符在CEdit中的哪个文本索引下一行 因此,在尝试执行此操作时,如果行的宽度超过矩形的宽度,我可以插入\r\n。但问题是,如果插入的字符被DrawText api视为新词后,对齐位于字符的中心,\r\n并且上述插入新行字符的目的失败 有没有人能让我知道,有没有什么方法可以让我知道CEdit或其他替代方案的线路在哪里断开 CString strTemp

我正在从CEdit控件获取文本。我需要在图像上模仿相同的文字。编辑控件是多行的,所以当我继续键入长字符串时,单词的剩余部分将转到下一行。 我不知道字符在CEdit中的哪个文本索引下一行

因此,在尝试执行此操作时,如果行的宽度超过矩形的宽度,我可以插入\r\n。但问题是,如果插入的字符被DrawText api视为新词后,对齐位于字符的中心,\r\n并且上述插入新行字符的目的失败

有没有人能让我知道,有没有什么方法可以让我知道CEdit或其他替代方案的线路在哪里断开

CString strTempFormattedText(_T(""));
LONG tempTotalWidth = 0;
for(int i = 0; i < myText.GetLength(); i++) {
    TCHAR tempChar = myText.GetAt(i);
    tempTotalWidth += pDC->GetTextExtent(CString(tempChar), 1).cx;
    if(tempTotalWidth >= rc.Width()) {
        tempTotalWidth = 0;
        strTempFormattedText.Append(_T("\n\r"));
    }
    strTempFormattedText.AppendChar(tempChar);
}
myText = strTempFormattedText;
switch(ALIGNMENT)
{
    case RIGHT:
        pDC->DrawText(myText, -1, rc, DT_WORDBREAK | DT_RIGHT );
        break;
    case CENTER:                                                       
        pDC->DrawText(myText, -1, rc, DT_WORDBREAK | DT_CENTER);
        break;
    case LEFT:
        pDC->DrawText(myText, -1, rc,  DT_WORDBREAK | DT_LEFT);
        break;   
}

谢谢

我认为你应该结合起来,解决你的问题。如果需要访问更复杂的CRichEditText,使用API而不是数据可能会很有用