我在尝试在 MFC 对话框的富文本编辑控件中显示 RTF 数据文件时遇到问题

问题描述

我看到了关于在富文本编辑控件中显示 RTF 文件的讨论 here。也许是我太过分了。

在我的对话框类中,我定义了一个静态方法

static DWORD CALLBACK MyStreamInCallback(DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG* pcb)
{
    std::ifstream* pFile = (std::ifstream*)dwCookie;
    pFile->read((char*)pbBuff,cb);
    return 0;
}

在我的对话框 OnInitDialog 类中,我尝试显示数据:

std::ifstream  File("d:\\RevisionHistoryTest.rtf");
EDITSTREAM es = { 0 };
es.dwCookie = (DWORD)&File;
es.pfnCallback = MyStreamInCallback;
::SendMessage(m_rtfEdit,EM_STREAMIN,SF_RTF,(LParaM)&es);

现在,这是示例项目的 link。我不知道从长远来看我可以把这个项目放在哪里,但我的 DropBox 现在可以。该项目不包括 RTF 文件。这是我创建它的方式:

  1. 我在浏览器中访问了以下 URL
  2. 我选择了所有修订历史内容并将其粘贴到 Microsoft Word 文件中。
  3. 我复制了 Microsoft Word 内容并将其粘贴到写字板会话中并保存。

示例:

enter image description here

有趣的是,当我随后在写字板中打开我的 RTF 文件时,我收到一条弹出消息:

enter image description here

如果我选择取消阻止,那么它仍会在编辑器中打开。我认为这是因为所有图像仍必须链接到我网站上的图像。我认为这与我的测试项目的问题有关,因为这是我所看到的:

enter image description here

我没有收到任何错误或任何东西。它只是读取第一行并停止。

我试图找到在 RTF 窗口中显示我的 HTML 历史记录的最简单方法


我的初衷是改用 CHtmlView 控件(这样做很有意义)并直接从 Internet 读取我的修订历史记录文件。但我的帮助系统旨在永久显示左侧的内容窗格。这就是为什么我认为 RTF 可能是一个合适的选择。却在挣扎。


更新

根据关于 64 位构建的评论,我找到了这个 tutorial,它适用于 32 位和 64 位。它们都只显示“修订历史”。

BOOL FillRichEditFromFile(HWND hwnd,LPCTSTR pszFile)
{
    BOOL fSuccess = FALSE;

    HANDLE hFile = CreateFile(pszFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);

    if (hFile != INVALID_HANDLE_VALUE)
    {
        EDITSTREAM es = { 0 };

        es.pfnCallback = MyStreamInCallback;
        es.dwCookie = (DWORD_PTR)hFile;

        if (SendMessage(hwnd,(LParaM)&es) && es.dwError == 0)
        {
            fSuccess = TRUE;
        }

        CloseHandle(hFile);
    }

    return fSuccess;

}

OnInitDialog中:

FillRichEditFromFile(m_rtfEdit.GetSafeHwnd(),_T("d:\\RevisionHistoryTest.rtf"));

但我最初的问题仍然存在。


更新

我忘记将控件设置为多行!这是问题的一部分:

enter image description here

现在至少所有文本都可见。只是不是图像。而且我不喜欢某些链接显示方式。

我已经能够编辑文件并将缩进移到左侧以使其看起来更好。但图像仍然不会显示


更新

作为一种解决方法,我意识到我可以简单地将我的 HTML 修订历史复制为一个独立的页面。然后我可以使用 CHtmlView:

enter image description here

好处是显示用户在帮助系统中看到的一致。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)