if(OpenClipboard())
{//复制到剪贴板
len = m_quickdata[nHotKeyId-10].lpQuickText.GetLength()+1;
clipbuffer = GlobalAlloc(GHND,len);
buffer = (char *)GlobalLock(clipbuffer);

_tcscpy_s(buffer,len,m_quickdata[nHotKeyId-10].lpQuickText);
GlobalUnlock(clipbuffer);
EmptyClipboard();
SetClipboardData(RegisterClipboardFormat(CF_RTF),clipbuffer);

CloseClipboard();
}
使用这种方法按Ctrl+V的时候可以粘贴到WPS文字中,但是不能粘贴到记事本、QQ中。有什么办法可以将RTF字符串复制到剪贴板中,并且可以粘贴到记事本、QQ这样的程序中呢?

解决方案 »

  1.   

    有一种蠢的方法就是使用RichTextBox读取RTF字符串,然后用RichTextBox复制文本到剪贴板。但是这中方法太不直接了,有没有直接复制到剪贴板的方法呢?
      

  2.   

    CRichEditCtrl::Copy  ?
      

  3.   

    RTF文本都是从文件中读取进来的,有多个,保存在内存当中。所以,要调用richtextbox的copy方法,太不直接,效率方面也不快。有没有直接让rtf文本直接复制到剪贴板,并且可以随意粘贴在其他程序中?
      

  4.   

    试试 RegisterClipboardFormat(CF_RTF | CF_RETEXTOBJ),
      

  5.   

    还是不行啊CF_RTF 和 CF_RETEXTOBJ都是文本型的 不能进行或运算,RegisterClipboardFormat(CF_RTF)|RegisterClipboardFormat(CF_RETEXTOBJ) 也不行。
      

  6.   

    好像richtextbox的rtf文本并不支持粘贴到qq、记事本等。但是wps却可以,不知道wps是如何实现的。
      

  7.   

    用VS拷贝了一段代码,用 Clipbrd 看了一下, 好像格式很多
      

  8.   

    MSDN 上有这样的例子,试试看 COleDataSource
     
    void CMyView::OnEditCopy()
    {
      // Create an OLE data source on the heap
      COleDataSource* pData = new COleDataSource;
      // ...
      // Get the currently selected data
      // ...
      // For the appropriate data formats...
      pData->CacheData( CF_??, hData );
      // ...
      // The Clipboard now owns the allocated memory
      // and will delete this data object
      // when new data is put on the Clipboard
      pData->SetClipboard();
    }