问题描述
我看到了关于在富文本编辑控件中显示 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 文件。这是我创建它的方式:
示例:
有趣的是,当我随后在写字板中打开我的 RTF 文件时,我收到一条弹出消息:
如果我选择取消阻止,那么它仍会在编辑器中打开。我认为这是因为所有图像仍必须链接到我网站上的图像。我认为这与我的测试项目的问题有关,因为这是我所看到的:
我没有收到任何错误或任何东西。它只是读取第一行并停止。
我试图找到在 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"));
但我最初的问题仍然存在。
更新
我忘记将控件设置为多行!这是问题的一部分:
现在至少所有文本都可见。只是不是图像。而且我不喜欢某些链接的显示方式。
我已经能够编辑文件并将缩进移到左侧以使其看起来更好。但图像仍然不会显示。
更新
作为一种解决方法,我意识到我可以简单地将我的 HTML 修订历史复制为一个独立的页面。然后我可以使用 CHtmlView
:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)