【问题标题】:CEdit index at which line-break happens发生换行符的 CEdit 索引
【发布时间】:2012-06-28 13:29:06
【问题描述】:

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

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

有人可以告诉我,有什么方法可以让我知道 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;   
}

谢谢

【问题讨论】:

    标签: visual-c++ mc


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 2016-11-03
      • 2018-04-08
      • 2011-11-30
      相关资源
      最近更新 更多