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

来源:互联网 发布:中高级java面试题 编辑:程序博客网 时间:2024/06/11 03:43
本文作者:无幻
测试环境: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.这是一个测试。


  • entry 1
  • entry 2 


    参考资料:
    1.HTML Clipboard Format  http://msdn.microsoft.com/en-us/library/aa767917.aspx
    2.如何使用 Visual c + + 向剪贴板添加 HTML 代码  http://support.microsoft.com/kb/274308

  • 原创粉丝点击