Artigo: 274308 - Última revisão: terça-feira, 29 de Junho de 2004 - Revisão: 1.4

Como adicionar código HTML para a área de transferência utilizando o Visual C++

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sumário

Este artigo demonstra como adicionar HTML (Hypertext Markup Language) para a área de transferência do Microsoft Windows utilizando o Visual C++. Também inclui uma função de exemplo que pode utilizar nas suas aplicações para simplificar o processo.

Mais Informação

HTML tem seu próprio formato da área de transferência denominado HTML Format (CF_HTML) que pode utilizar para fornecer os dados para outras aplicações, tais como o Microsoft Excel, o Microsoft Word ou outras aplicações do Microsoft Office.

CF_HTML totalmente é um formato baseado em texto inclui uma descrição, um contexto e um fragmento dentro nesse contexto. Quando cria dados para enviar para a área de transferência, tem de incluir uma descrição dos dados para indicar a versão da área de transferência e os desvios de contexto e fragmento. Calcular os deslocamentos pode ser a parte difícil. No entanto, pode utilizar a seguinte rotina para simplificar esta tarefa:
// 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;
}
				
quando utilizar esta função para copiar um fragmento de código HTML para a área de transferência, aspecto semelhante ao seguinte:
    char *html = 
        "<b>This is a test</b><hr>"
        "<li>entry 1"
        "<li>entry 2";
    CopyHTML(html);
				

Notas adicionais

Utilizar uma abordagem que envia o código HTML para a área de transferência pode ser especialmente útil para clientes de automatização do Office. Por exemplo, se tiver um cliente de automatização que necessita para gerar dados formatados para células no Microsoft Excel ou parágrafos no Microsoft Word, pode criar os dados no código HTML, enviá-lo para a área de transferência e, em seguida, colá-lo a aplicação. Utilizando esta técnica, pode reduzir o número de chamadas de fora de processo para o cliente de automatização.

Referências

Para obter mais informações sobre as especificidades do formato de área de transferência do HTML, consulte o tópico "Formato de área de transferência de HTML" na MSDN:
http://msdn.microsoft.com/en-us/library/aa767917.aspx (http://msdn.microsoft.com/en-us/library/aa767917.aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 6.0 Professional Edition
Palavras-chave: 
kbmt kbclipboard kbhowto kbhtml KB274308 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 274308  (http://support.microsoft.com/kb/274308/en-us/ )