Freigeben über


Hinzufügen von HTML-Code zur Zwischenablage mithilfe von Visual C++

In diesem Artikel wird das Hinzufügen von HTML-Code (Hypertext Markup Language) zur Microsoft Windows-Zwischenablage mithilfe von Visual C++ veranschaulicht.

Originalproduktversion: Visual C++
Ursprüngliche KB-Nummer: 274308

Zusammenfassung

Dieser Artikel enthält eine Beispielfunktion, die Sie in Ihren Anwendungen verwenden können, um das Hinzufügen von HTML-Code zur Zwischenablage zu vereinfachen.

HTML-Zwischenablageformat

HTML verfügt über ein eigenes Zwischenablageformat namens HTML-Format (CF_HTML), das Sie verwenden können, um Ihre Daten für andere Anwendungen wie Excel, Word oder andere Office-App lications bereitzustellen.

CF_HTML ist ein textbasiertes Format, das eine Beschreibung, einen Kontext und ein Fragment in diesem Kontext enthält. Wenn Sie Daten erstellen, die an die Zwischenablage gesendet werden sollen, müssen Sie eine Beschreibung der Daten angeben, um die Zwischenablageversion und die Offsets für den Kontext und das Fragment anzugeben. Die Berechnung der Offsets kann der schwierige Teil sein. Sie können jedoch die folgende Routine verwenden, um diese Aufgabe zu vereinfachen.

Weitere Informationen finden Sie im HTML-Zwischenablageformat.

Beispielcode

// 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;
}

Wenn Sie diese Funktion verwenden, um ein HTML-Codefragment in die Zwischenablage zu kopieren, könnte es wie im folgenden Beispiel aussehen:

char *html =
    "<b>This is a test</b><hr>"
    "<li>entry 1"
    "<li>entry 2";
CopyHTML(html);

Weitere Informationen

Die Verwendung eines Ansatzes, der HTML-Code an die Zwischenablage sendet, kann für Office-Automatisierungsclients besonders nützlich sein. Wenn Sie beispielsweise über einen Automatisierungsclient verfügen, der formatierte Daten für Zellen in Excel oder Absätzen in Word generieren muss, können Sie die Daten im HTML-Code erstellen, an die Zwischenablage senden und dann in die Anwendung einfügen. Mit dieser Technik können Sie die Anzahl der Aufrufe außerhalb von Prozessen an den Automatisierungsclient reduzieren.