文章編號: 274308 - 上次校閱: 2004年6月29日 - 版次: 1.4

如何加入 HTML 程式碼,以使用 Visual C++ 剪貼簿

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

本文將告訴您,如何藉由使用 Visual C++ 將 「 超文字標記語言 (HTML) 加入至 Microsoft Windows 剪貼簿。它也包含範例的函數,您可以使用在您的應用程式,以簡化程序中。

其他相關資訊

HTML 具有名為 HTML 格式 (CF_HTML) 可讓您提供您的資料,如 Microsoft Excel,Microsoft Word 或其他 Microsoft Office 應用程式其他應用程式以它自己的剪貼簿格式。

CF_HTML 完全是文字為主的格式,包含描述、 一個內容及該內容內的片段。您在建置要傳送到剪貼簿資料時,您必須包含以指出剪貼簿版本,且 [內容] 和 [片段位移資料的說明。計算位移可以是困難的部分。但是,您可以使用下列常式來簡化這項工作:
// CopyHtml() - Copies given HTML to the clipboard.
// The HTML/BODY blanket is provided, so you only need to
// call it like CallHtml("<b>This is a test</b>");

void CopyHTML(char *html) {
    // Create temporary buffer for HTML header...
    char *buf = new char [400 + strlen(html)];
    if(!buf) return;

    // Get clipboard id for HTML format...
    static int cfid = 0;
    if(!cfid) cfid = RegisterClipboardFormat("HTML Format");

    // Create a template string for the HTML header...
    strcpy(buf,
        "Version:0.9\r\n"
        "StartHTML:00000000\r\n"
        "EndHTML:00000000\r\n"
        "StartFragment:00000000\r\n"
        "EndFragment:00000000\r\n"
        "<html><body>\r\n"
        "<!--StartFragment -->\r\n");

    // Append the HTML...
    strcat(buf, html);
    strcat(buf, "\r\n");
    // Finish up the HTML format...
    strcat(buf,
        "<!--EndFragment-->\r\n"
        "</body>\r\n"
        "</html>");

    // Now go back, calculate all the lengths, and write out the
    // necessary header information. Note, wsprintf() truncates the
    // string when you overwrite it so you follow up with code to replace
    // the 0 appended at the end with a '\r'...
    char *ptr = strstr(buf, "StartHTML");
    wsprintf(ptr+10, "%08u", strstr(buf, "<html>") - buf);
    *(ptr+10+8) = '\r';

    ptr = strstr(buf, "EndHTML");
    wsprintf(ptr+8, "%08u", strlen(buf));
    *(ptr+8+8) = '\r';

    ptr = strstr(buf, "StartFragment");
    wsprintf(ptr+14, "%08u", strstr(buf, "<!--StartFrag") - buf);
    *(ptr+14+8) = '\r';

    ptr = strstr(buf, "EndFragment");
    wsprintf(ptr+12, "%08u", strstr(buf, "<!--EndFrag") - buf);
    *(ptr+12+8) = '\r';

    // Now you have everything in place ready to put on the
    // clipboard.

    // Open the clipboard...
    if(OpenClipboard(0)) {
        
        // Empty what's in there...
        EmptyClipboard();
        
        // Allocate global memory for transfer...
        HGLOBAL hText = GlobalAlloc(GMEM_MOVEABLE |GMEM_DDESHARE, strlen(buf)+4);
        
        // Put your string in the global memory...
        char *ptr = (char *)GlobalLock(hText);
        strcpy(ptr, buf);
        GlobalUnlock(hText);
        
        ::SetClipboardData(cfid, hText);
        
        CloseClipboard();
        // Free memory...
        GlobalFree(hText);
        
    }

    // Clean up...
    delete [] buf;
}
				
當您使用這個函式,將 HTML 程式碼片段複製到剪貼簿時,它看起來會像下列:
    char *html = 
        "<b>This is a test</b><hr>"
        "<li>entry 1"
        "<li>entry 2";
    CopyHTML(html);
				

額外的筆記

使用傳送到剪貼簿的 HTML 程式碼的方式可能會為 Office 自動化用戶端特別有用。比方說如果您需要在 Microsoft Excel 或 Microsoft Word 中的段落中產生的儲存格的格式化的資料的自動化用戶端可以建置 HTML 程式碼中的資料、 將它傳送到剪貼簿,然後將其貼至應用程式。利用這項技術您可以減少自動化用戶端的逾時的處理程序呼叫的數目。

?考

若要進一步了解 HTML 剪貼簿格式的細節,請參閱主題在 [MSDN 的 「 HTML 剪貼簿格式 」:
http://msdn.microsoft.com/en-us/library/aa767917.aspx (http://msdn.microsoft.com/en-us/library/aa767917.aspx)

這篇文章中的資訊適用於:
  • Microsoft Visual C++ 6.0 Professional Edition
關鍵字:?
kbmt kbclipboard kbhowto kbhtml KB274308 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:274308? (http://support.microsoft.com/kb/274308/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。