繁体   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