如何获取RichEdit中的RTF格式文本?

lcy_888 2016-06-08 10:40:17
WIN32对话框程序中有一个richedit及一个editbox,在richedit中输入文本,要求在editbox内显示对应的RTF格式文本(如:\'b5\'e7\'d7\'d3\'d3\'eb\'b5\'e7\'c4\'d4 ),但不要使用保存RICHEDIT内文本为RTF格式文件再读取的方法。
...全文
251 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-06-24
  • 打赏
  • 举报
回复
仅供参考:
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <windows.h>
#include <atlimage.h>
#include <objidl.h>
void DrawPic(HDC hdc,char *buf,int len) {
    HGLOBAL hMem=GlobalAlloc(GMEM_FIXED,len);
    BYTE* pMem=(BYTE*)GlobalLock(hMem);
    memcpy(pMem,buf,len);
    IStream* pStream;
    HRESULT hr=CreateStreamOnHGlobal(pMem,FALSE,&pStream);

    CImage img;
    img.Load(pStream);
    img.Draw(hdc,CPoint(0,0));

    img.Destroy();
    pStream->Release();
    GlobalUnlock(hMem);
    GlobalFree(hMem);
}
//HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = FALSE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
void ShowTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = TRUE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
int main() {
    HWND  hwnd;
    HDC   hdc;
    HFONT hfont;
    HBITMAP hbm;
    HDC hdcBits;
    BITMAP bm;

    system("color F0");
    system("cls");
    HideTheCursor();
    hwnd  = GetConsoleWindow();
    hdc   = GetDC(hwnd);
    hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
    SelectObject(hdc,hfont);
    TextOut(hdc,10,10,"这是泡泡",8);
    DeleteObject(hfont);
    hbm=(HBITMAP)LoadImage(0,"C:\\Windows\\Soap Bubbles.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
    if (hbm) {
        hdcBits = CreateCompatibleDC(hdc);
        GetObject (hbm, sizeof(BITMAP), &bm);
        SelectObject(hdcBits,hbm);
        BitBlt(hdc,200,10,bm.bmWidth, bm.bmHeight,hdcBits,0,0,SRCCOPY);
        DeleteDC(hdcBits);
        DeleteObject(hbm);
    }
    getch();
    FILE *f;
    f=fopen("c:\\new\\tmp.jpg","rb");
    if (f) {
        int fl=filelength(fileno(f));
        char *buf=(char *)malloc(fl);
        if (buf) {
            fread(buf,fl,1,f);
        }
        fclose(f);
        if (buf) {
            DrawPic(hdc,buf,fl);
            free(buf);
        }
    }
    ReleaseDC(hwnd,hdc);
    getch();
    system("color 07");
    system("cls");
    ShowTheCursor();
    return 0;
}
lswandym_888 2016-06-24
  • 打赏
  • 举报
回复
static DWORD CALLBACK EditStreamOutCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { string *psEntry = (string*)dwCookie; string tmpEntry = string((LPCSTR)pbBuff); *psEntry += tmpEntry.substr(0, cb); return 0; } long GetRTFText(string &_wstrRTF) { EDITSTREAM es = { (DWORD)&_wstrRTF, 0, EditStreamOutCallback }; StreamOut(SF_RTF, es); size_t iLen = _wstrRTF.size(); return iLen; };
用户 昵称 2016-06-12
  • 打赏
  • 举报
回复
我觉得最重要的是pfnCallback,那个就是你的处理函数,dwCookie,写成NULL,只要你不去使用,也没关系吧。
lcy_888 2016-06-08
  • 打赏
  • 举报
回复
确切的说是换成表示内存的一个指针,而非文件指针。
lcy_888 2016-06-08
  • 打赏
  • 举报
回复
我也参考了一些示例,大多是这样子: EDITSTREAM es; es.dwCookie = (DWORD)&cFile; 我现在的想法是将es.dwCookie换成一个指针,不知可不可行。
cutmelon 2016-06-08
  • 打赏
  • 举报
回复
CRichEditCtrl::StreamOut
lcy_888 2016-06-08
  • 打赏
  • 举报
回复
谢谢提示,再摸索。
用户 昵称 2016-06-08
  • 打赏
  • 举报
回复
有现成的是肯定的,你说的这个,不全吧,一段文字,不只是有这样的格式,rtf格式挺复杂的 scite中,有拷贝一段文字为rtf的代码,挺复杂的,想简单的话,还是要借助richedit的保存功能。只不过可以做到悄悄的。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧