簡體   English   中英

需要幫助來設置 RichEdit

[英]Need help to setup RichEdit

我正在嘗試在 RichEdit(我猜是 v2.0,因為我使用“Riched20.dll”庫)中設置以下文本:

{\\rtf1Привет!\\par{ \\i This } 超級{\\b text}。\\par}

第一個問題是錯誤的符號而不是非拉丁文本Привет ,第二個問題是粗體文本部分{\\\\b text} ,呈現為非粗體。 這是屏幕截圖:

RTF 示例

Visual Studio 設置為“使用 Unicode 字符集”(我正在開發的應用程序已經以這種方式設置,而且我對 Win 編碼的工作方式仍然很不滿意)。 我使用普通(例如不是寬字符)std::string,因為寬字符類不適用於我的代碼 - 這是我之前的問題

這是代碼片段:

    DWORD CALLBACK EditStreamInCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG* pcb)
    {
        std::stringstream* rtf = (std::stringstream*)dwCookie;
        *pcb                   = rtf->readsome((char*)pbBuff, cb);
        return 0;
    }

    // ...
    auto hwndEdit = CreateRichEdit(hWnd, 100, 100, 300, 300, hInstance);
    std::stringstream rtf("{\\rtf1Привет!\\par{ \\i This } is super {\\b text}.\\par}");

    EDITSTREAM es  = { 0 };
    es.dwCookie    = (DWORD_PTR)&rtf;
    es.pfnCallback = &EditStreamInCallback;

    SendMessage(hwndEdit, EM_STREAMIN, SF_RTF, (LPARAM)&es);

更新:最終目標是:從 JSON 中獲取一些 RTF 字符串(可能包含 unicode(?) 文本、鏈接等),例如:

{
    "text": "{\\rtf1Привет!\\par{ \\i This } is super {\\b text}.\\par}"
}

,顯示它,處理超鏈接的點擊,並且幾乎可以肯定會修改特定符號(特定符號是自定義符號,它替換了我們自己修改的 .ttf 字體中的原始符號)。 我還沒有閱讀 RTF 文檔並使用給定的字符串來檢查 RichEdit 控制和相應的 winapi 是如何工作的。

我想最終的 RTF 文本將在 RTF 編輯器中形成。 幾乎可以肯定,寫字板。

根據 RTF 格式規范轉換您的文本:

std::string rtf("{\\rtf1\\deff1{\\fonttbl{\\f0\\fcharset0 Times New Roman;}{\\f1\\fcharset0 Segoe UI;}}{\\lang1033{\\f1{\\ltrch\\u1055?\\u1088?\\u1080?\\u1074?\\u1077?\\u1090?!}\\li0\\ri0\\sa0\\sb0\\fi0\\ql\\par}{\\f1{\\i\\ltrch This }{\\ltrch is super }{\\b\\ltrch text}{\\ltrch .}\\li0\\ri0\\sa0\\sb0\\fi0\\ql\\par}}}");

std::stringstream ss(rtf);
EDITSTREAM es = { 0 };
es.dwCookie = (DWORD_PTR)&ss;
es.pfnCallback = &EditStreamInCallback;
SendMessage(richedit, EM_STREAMIN, SF_RTF, (LPARAM)&es);

rtf字符串生成以下文本:

在此處輸入圖片說明

上面rtf字符串中使用的主要控制字列表(根據富文本格式 (RTF) 1.5 版規范):

  • \\rtf1
    RTF 文檔規范版本為 1。

  • \\定義N
    \\deff 控制字指定了默認字體編號。

  • \\fonttbl
    \\fonttbl 控制字引入了字體表組。

  • \\lang1033
    將語言應用於字符。 N是對應於一種語言的數字。

在項目設置中,您可以將Character Set定義為Use Unicode characterUse Multi-Byte CharacterNot Set ,在這種情況下無關緊要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM