如何在 MFC(或仅 C++)中将 Table 写入剪贴板以粘贴到 Word 中?

How to write a Table to clipboard in MFC (or just c++) to be pasted into word?

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

到目前为止,我研究过使用富文本格式来绘制 table。我已经成功地完成了一个 .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}

我想将 table 写到剪贴板,例如:

::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 技巧可以做到这一点?

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

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