VC复制HTML格式到剪贴板 HTML Clipboard Format

本文作者:无幻
测试环境:Windows 7
开发环境:Visual Studio 2008 SP1

        参照MSDN和帮助,在VC下测试代码如下:

C++语言
BOOL CBaseDialogDlg::CopyHtmlToClip(  const CString &strHtml )
{
     // 1)转换成UTF-8
    CW2A pszU8(CT2W(strHtml), CP_UTF8);
     int nHtmlSrcLen = strlen(pszU8);

     // 2)组成剪贴板片段
    CStringA strHtmlClip;
    strHtmlClip.Format( "Version:0.9 \r\n "
         "StartHTML:%08u \r\n "
         "EndHTML:%08u \r\n "
         "StartFragment:%08u \r\n "
         "EndFragment:%08u \r\n "
         "<html><body> \r\n "
         "<!--StartFragment --> \r\n "
         "%s \r\n "
         "<!--EndFragment--> \r\n "
         "</body></html>",
        97, 172 + nHtmlSrcLen, 111, 136 + nHtmlSrcLen, pszU8);

     // 3)剪贴板操作
     static  int cfid = 0;
     if(!cfid)
    {
        cfid = RegisterClipboardFormat(_T( "HTML Format"));
    }

     if (!OpenClipboard())
    {
         return  false;
    }

     if (!EmptyClipboard())
    {
        CloseClipboard();
         return  false;
    }

    HGLOBAL hClipBuffer = GlobalAlloc(GMEM_DDESHARE, strHtmlClip.GetLength() + 1);
     if (hClipBuffer == NULL)
    {
        CloseClipboard();
         return  false;
    }

     char *lpExpBuffer = ( char *)GlobalLock(hClipBuffer);
     if (lpExpBuffer == NULL)
    {
        GlobalFree(hClipBuffer);
        CloseClipboard();
         return  false;
    }

    memcpy(lpExpBuffer, strHtmlClip, strHtmlClip.GetLength());
    lpExpBuffer[strHtmlClip.GetLength()] =  '\0';

    GlobalUnlock(hClipBuffer);
    SetClipboardData(cfid, hClipBuffer);
    CloseClipboard();    

     return TRUE;
}
调用方式:
C++语言
void CBaseDialogDlg::OnBnClickedButton1()
{
    CString str = _T( "<b>This is a test.这是一个测试。</b><hr><li>entry 1<li>entry 2");
    CopyHtmlToClip(str);
}
利用个剪贴板查看器,可以查看此时剪贴板的内容:

然后,Ctrl + V粘贴到博客编辑器里面,效果如下所示:
This is a test.这是一个测试。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值