none
RichEdit导出word RRS feed

  • 问题

  • DWORD CALLBACK SaveCallBack1(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb)
    {
    	//写入文件
    	FILE* file = (FILE *)(dwCookie);
    	if (file != nullptr)
    	{
    		fwrite((void*)(pbBuff), 1, cb, file);
    		*pcb = cb;
    		fflush(file);
    	}
    
    	return 0;
    }
    
    FILE* file;
    fopen_s(&file, m_sTempFileName.c_str(), "w+");*/
    
    //构造数据
    EDITSTREAM EditStream;
    EditStream.pfnCallback = SaveCallBack1; //这是我们的回调函数
    EditStream.dwCookie = (DWORD_PTR)m_HandTempFile;
    			
    //写入文件
    
    Edit* pEdit = m_pm.find(xxx);
    pEdit->StreamOut(SF_RTF, EditStream);
    fclose(file);
    
    
    
    
    


    这段代码是10秒钟执行一次,如果文件只打开一次的话,以后edit写的内容就不会保存,只会保存第一次写入Edit的内容,
    如果每次执行,都是新打开文件,写入 关闭,就不会出现问题

    这是为什么?

    2017年9月11日 9:55

全部回复

  • Hi 岁月流年,

    >>这段代码是10秒钟执行一次,如果文件只打开一次的话,以后edit写的内容就不会保存,只会保存第一次写入Edit的内容,
    如果每次执行,都是新打开文件,写入 关闭,就不会出现问题

    对于这种情况,我建议你检查一下EditStreamCallback 回调函数的返回值。当你发送EM_STREAMOUT消息的时候,rich edit控件可以重复调用由EDITSTREAM结构的pfnCallback成员指定的EditStreamCallback函数。每次调用回调函数时,控件将传递一个包含控件内容的一部分的缓冲区。这个过程一直持续到控件已经通过其所有的内容到回调函数,或直到发生错误。回调函数返回非零值以指示错误。如果发生错误,则读取或写入操作结束,并且rich edit控件将丢弃pbBuff缓冲区中的任何数据。

    关于更多可能中断传输的原因,你可以参考以下文档。

    https://msdn.microsoft.com/en-us/library/windows/desktop/bb774368%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    希望对你有所帮助。

    Best Regards,

    Sera Yu


    MSDN Community Support Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已建议为答案 Baron Bi 2017年9月20日 8:27
    2017年9月12日 7:36