0

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;   
}

ありがとう

4

1 に答える 1

0

問題を解決するには、 LineIndexLineLength、およびPosFromCharを組み合わせる必要があると思います。より複雑な CRichEditText にアクセスする必要がある場合は、データの代わりに API を使用すると便利です。

于 2012-06-28T14:05:00.483 に答える