如何在MFC(或只是c ++)中将表写入剪贴板以粘贴到word中?

时间:2015-02-18 13:30:39

标签: c++ mfc clipboard rtf

我正在编写一个MFC程序,并希望能够以表格形式输出一些数据,最好是将其写入剪贴板,然后将其粘贴到单词中。

到目前为止,我已经研究过使用富文本格式来绘制表格。我已经成功完成了.rtf文件,如下所示:

std::string s = "{\\rtf \\par \\trowd \\trqc\\trgaph108\\trrh280\\trleft36"
    "\\clbrdrt\\brdrth \\clbrdrl\\brdrth \\clbrdrb\\brdrdb"
    "\\clbrdrr\\brdrdb \\cellx3636\\clbrdrt\\brdrth"
    "\\clbrdrl\\brdrdb \\clbrdrb\\brdrdb \\clbrdrr\\brdrdb"
    "\\cellx7236\\clbrdrt\\brdrth \\clbrdrl\\brdrdb"
    "\\clbrdrb\\brdrdb \\clbrdrr\\brdrdb \\cellx10836\\pard \\intbl "
    "First Cell"
    " \\cell \\pard \\intbl "
    "Second Cell"
    " \\cell \\pard \\intbl "
    "Third Cell"
    " \\cell \\pard \\intbl \\row"
    "\\trowd \\trqc\\trgaph108\\trrh280\\trleft36 \\clbrdrt\\brdrdb"
    "\\clbrdrl\\brdrth \\clbrdrb \\brdrsh\\brdrs \\clbrdrr\\brdrdb"
    "\\cellx3636\\clbrdrt\\brdrdb \\clbrdr \\brdrdb"
    "\\clbrdrb\\brdrsh\\brdrs \\clbrdrr\\brdrdb"
    "\\cellx7236\\clbrdrt\\brdrdb \\clbrdr \\brdrdb"
    "\\clbrdrb\\brdrsh\\brdrs \\clbrdrr\\brdrdb \\cellx10836\\pard"
    "\\intbl "
    "Fourth Cell"
    " \\cell \\pard \\intbl "
    "Fifth Cell"
    " \\cell \\pard \\intbl "
    "Sixth Cell"
    "\\cell \\pard"
    "\\intbl \\row \\pard}";
ofstream file("f.rtf");
if(file.is_open())
{ file << s; file.close}

我想把表写成剪贴板,例如:

::OpenClipboard(NULL);
EmptyClipboard();
HGLOBAL hg = GlobalAlloc(GMEM_MOVEABLE, s.size());
if (!hg){
    CloseClipboard();
    return;
}
memcpy(GlobalLock(hg), s.c_str(), s.size());
GlobalUnlock(hg);
SetClipboardData(CF_TEXT, hg);
CloseClipboard();
GlobalFree(hg);

但我无法找到富文本的剪贴板格式。有可能这样做吗?是否有任何MFC技巧可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要注册格式(或获取已注册的格式):

CLIPFORMAT cfRTF = RegisterClipboardFormat(_T("Rich Text Format"));