ID do 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 usando 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 | Recolher tudo

Sumário

Este artigo demonstra como adicionar HTML (Hypertext Markup Language) a área de transferência da Microsoft Windows usando o Visual C++. Ele também inclui uma função de exemplo que você pode usar em seus aplicativos para simplificar o processo.

Mais Informações

HTML tem seu próprio formato de área de transferência chamado HTML Format (CF_HTML) que você pode usar para fornecer os dados para outros aplicativos, como o Microsoft Excel, Microsoft Word ou outros aplicativos do Microsoft Office.

CF_HTML totalmente é um formato baseado em texto inclui uma descrição, um contexto e um fragmento dentro desse contexto. Quando você cria dados serem enviados para a área de transferência, você deve incluir uma descrição dos dados para indicar a versão de área de transferência e os deslocamentos para o contexto e fragmento. Calcular os deslocamentos pode ser a parte difícil. No entanto, você pode usar a seguinte rotina para simplificar essa 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 você usa essa função para copiar um fragmento de código HTML para a área de transferência, ele pode parecer o seguinte:
    char *html = 
        "<b>This is a test</b><hr>"
        "<li>entry 1"
        "<li>entry 2";
    CopyHTML(html);
				

Observação adicional

Usar uma abordagem que envia o código HTML para a área de transferência pode ser especialmente útil para clientes de automação do Office. Por exemplo, se você tiver um cliente de automação que precisa gerar dados formatados para células no Microsoft Excel ou parágrafos no Microsoft Word, você pode criar os dados no código HTML, enviá-lo para a área de transferência e cole-o no aplicativo. Usando essa técnica, você pode reduzir o número de chamadas fora de processo para o cliente de automação.

Referências

Para saber mais sobre as especificações do formato de área de transferência de HTML, consulte o tópico "Formato de área de transferência de HTML" em 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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/ )