C++WIN32-将RTF数据加载到Rich Edit控件
C++ WIN32 - Load RTF Data to Rich Edit Control
我试图将文本(在RTF中格式化(加载到我的富文本控件,但它不起作用。我甚至试过使用
WriteFile((HANDLE)dwCookie, myBuff, cb, (DWORD*)pcb, NULL);
而不是
*pcb = rtf->readsome((char*)pbBuff, cb);
void CreateRichEdit(HWND hwndOwner, int x, int y, int width, int height, HINSTANCE hinst)
{
LoadLibrary(TEXT("Msftedit.dll"));
edittext = CreateWindowEx(0, TEXT("RICHEDIT50W"), TEXT("Type here"), ES_MULTILINE | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP | ES_AUTOVSCROLL | WS_VSCROLL,
x, y, width, height,
hwndOwner, NULL, hinst, 0);
std::string teext = "{rtf1ansi{fonttbl{ f0fnilfcharset0fprq0fttruetype Helvetica; }{f1fnilfcharset0fprq0fttruetype Bitstream Charter; }}{f1fs24 Ceci est un texte accentu'e9}par{ f0fs24 avec des caract'e8res {b gras},}par{ f1 des{ fs18 petits } et des{ fs32 gros }. }}";
std::stringstream rtf("{rtf1ansi{fonttbl{ f0fnilfcharset0fprq0fttruetype Helvetica; }{f1fnilfcharset0fprq0fttruetype Bitstream Charter; }}{f1fs24 Ceci est un texte accentu'e9}par{ f0fs24 avec des caract'e8res {b gras},}par{ f1 des{ fs18 petits } et des{ fs32 gros }. }}");
//std::stringstream rtf("...");
EDITSTREAM es = { 0 };
es.dwError = 0;
es.dwCookie = (DWORD_PTR)&rtf;
es.pfnCallback = EditStreamInCallback;
SendMessage(edittext, EM_STREAMIN, SF_RTF, (LPARAM)&es);
}
DWORD CALLBACK EditStreamInCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb)
{
std::stringstream * rtf = (std::stringstream*) dwCookie;
std::string text = (*rtf).str();
char myBuff[500];
*pcb = rtf->readsome((char*)pbBuff, cb);
return *pcb;
}
我还试图取消对std::stringstream rtf("...");
的注释,只是为了在编辑控件中写入...
,但它不起作用。
通过返回从流中读取的字节数(在本例中为非零字节数(,您告诉控件编辑流回调不成功。尝试return *pcb > 0 ? 0 : 1;
从EditStreamInCallback
返回。您还可以考虑使用rtf->fail()
来确定此回调的成功。此外,针对NULL
或nullptr
测试rtf
将是一个好主意(也是成功或失败的指示(。
https://learn.microsoft.com/en-us/windows/desktop/api/Richedit/nc-richedit-editstreamcallback
回调函数返回零表示成功。
回调函数返回一个非零值以指示错误。如果发生错误,读取或写入操作结束,富编辑控件将丢弃pbBuff缓冲区中的任何数据。
相关文章:
- C++WIN32-将RTF数据加载到Rich Edit控件
- win32 c++ 我想在静态标签的文本之后直接插入一个 EDIT 控件
- QListWidget 的 editItem() 输出"edit: editing failed"
- 是否可以将来自 Win32 EDIT 控件的文本输入存储在C++ std::string 中?
- 如何在Visual Studio 2019中使用cmake项目进行"Edit and Continue"构建?
- MFC Rich Edit Control 2.0接收到单击事件
- MFC Rich编辑控件2.0文本颜色
- QTreeWidget editItem 因"edit: editing failed"而失败
- 如何在使用winapi(C++)时同时更新Listview和Edit
- 如何使用 DTE。VS2010 C++宏中的 ExecuteCommand( "Edit.GoToDefinition" )?
- (EDIT:MFC)CString类的对象的内部结构是什么
- Javascript Ball Class? - EDIT
- RC 文件更改以静默方式失败; "Cannot open the resource file for edit"
- 如何在按键"Enter"上杀死"edit"控件的焦点
- Hotswapping / Edit and continue for C/C++, Linux
- C++中"rich type"结构的开销
- 在c++ WINAPI中对EDIT控件子类化时,窗口为空
- 头文件和多类用法(EDIT:正向声明)
- Rich Edit控件更改对话框返回值行为