Sie können Tabellen und Rahmen mit Rich-Edit anzeigen. Im Folgenden wird eine Box mit festen Grenzen zeigen:
str = L"{\\rtf1\
\\trowd\\trgaph72 \
\\clbrdrt\\brdrdot\\clbrdrl\\brdrdot\\clbrdrb\\brdrdot\\clbrdrr\\brdrdot \
\\cellx3000 TEXT\\intbl\\cell \
\\row\\pard\\par\
}";
Wenn Sie dies in Microsoft Word ausführen wird es gepunktete Linien zeigen, wie es soll. RichEdit behandelt keine gepunkteten Rahmen, wie es sollte, oder vielleicht erwartet es ein anderes Format. Wenn Sie die Datei aus Word speichern, werden weiterhin keine gepunkteten Linien angezeigt.
Wenn Sie nicht gepunktete Linien dann diese einfachen Beispiele benötigen Sie Boxen in RichEdit zeigen:
CString str;
str = L"{\\rtf1\
\\trowd\\trgaph72 \
\\cellx3000 TEXT\\intbl\\cell \
\\row\\pard\\par\
}";
str = L"\
{\\rtf1\\ansi\\deff0\
\\trowd\
\\cellx1000\
\\cellx2000\
\\cellx3000\
\\ TEXT1\\cell\
\\ TEXT2\\cell\
\\ TEXT3\\cell\
\\row\
}";
Siehe auch link
Hinweis, CRichEditCtrl::SetWindowText
wird ::SetWindowText
WinAPI rufen Sie einfach an, es wird gesetzt die Zeichenkette als einfacher Text.
Verwenden Sie CRichEdit::StreamIn
, um Raw RTF-Zeichenfolge festzulegen. In Ihrem Fall verwenden Sie wahrscheinlich Ihre eigene Klasse, die CRichEditCtrl::SetWindowText
überschreibt und das erforderliche Streaming ausführt.
Versuchen Sie Folgendes zu rtf-String aus Word Rechtschreibprüfung RichEdit zu bekommen:
DWORD __stdcall rtfstreamget(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CStringA text;
text.GetBufferSetLength(cb);
CStringA *ptr = (CStringA*)dwCookie;
for(int i = 0; i < cb; i++)
text.SetAt(i, *(pbBuff + i));
*ptr += text;
*pcb = text.GetLength();
text.ReleaseBuffer();
return 0;
}
bool GetRTF(hWnd, CString &sW)
{
CStringA sA;
EDITSTREAM es{ 0 };
es.dwCookie = (DWORD_PTR)&sA;
es.pfnCallback = rtfstreamget;
edit.StreamOut((CP_UTF8 << 16) | SF_USECODEPAGE | SF_RTF, es);
SendMessage(hWnd, EM_STREAMOUT,
(CP_UTF8 << 16) | SF_USECODEPAGE | SF_RTF, (LPARAM)&es);
sW = CA2W(sA, CP_UTF8);
return es.dwError == 0;
}
CStringW s;
GetRTF(msword_spellcheck_hwindow, str);
'm_reText.SetWindowText (strRtfText);' wird nicht funktionieren. Es zeigt nur den Text wie '' {\ rtf1 \ box \ ... "'. Sie haben den RTF-Text über den Edit-Stream geladen. Es wird immer noch einige Funktionen wie diese Grenzen nicht zeigen. Microsoft Word verwendet eine andere Engine, deshalb kann es angezeigt werden. Ich denke in RTF kannst du Tische zeigen, an die ich mich nicht erinnere. Sie könnten das HTML-Steuerelement verwenden, aber das könnte zu anderen Problemen führen. –
Vielen Dank für die Antwort. Für mich funktioniert das Laden mit SetWindowText gut, das Steuerelement zeigt so viel Formatierung wie Wordpad, einschließlich Tabellen. Aber mit Ausnahme dieser Grenzen ( – vtrz
"Microsoft Word verwendet eine andere Engine") Wenn ja, warum lädt RichEdit20W, wie von Spion ++ für Rechtschreibprüfung Dialogfeld in MS Word 2010 angezeigt (und dieses Feld * zeigt * die Grenzen um Text)? – vtrz