Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo demonstra como adicionar código HTML à área de transferência do Microsoft Windows usando o Visual C++.
Versão original do produto: Visual C++
Número original do KB: 274308
Resumo
Este artigo inclui uma função de exemplo que você pode usar em seus aplicativos para simplificar o processo de adição de código HTML à área de transferência.
Formato da área de transferência HTML
O HTML tem seu próprio formato de área de transferência chamado Formato HTML (CF_HTML) que você pode usar para fornecer seus dados a outros aplicativos, como Excel, Word ou outros aplicativos do Office.
CF_HTML é inteiramente um formato baseado em texto que inclui uma descrição, um contexto e um fragmento dentro desse contexto. Ao criar dados para enviar para a área de transferência, você deve incluir uma descrição dos dados para indicar a versão da área de transferência e os deslocamentos para o contexto e o fragmento. Calcular os deslocamentos pode ser a parte difícil. No entanto, você pode usar a rotina a seguir para simplificar essa tarefa.
Para obter mais informações, consulte Formato da área de transferência HTML.
Código de exemplo
// 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, ela pode ser semelhante ao exemplo a seguir:
char *html =
"<b>This is a test</b><hr>"
"<li>entry 1"
"<li>entry 2";
CopyHTML(html);
Mais informações
Usar uma abordagem que envia código HTML para a área de transferência pode ser especialmente benéfico para clientes de automação de escritório. Por exemplo, se você tiver um cliente de automação que precise gerar dados formatados para células no Excel ou parágrafos no Word, poderá criar os dados em código HTML, enviá-los para a área de transferência e colá-los no aplicativo. Usando essa técnica, você pode reduzir o número de chamadas fora do processo para o cliente de Automação.