2601C++,复制超文本格式

超文本的剪切板格式

超文本有自己的剪切板格式(叫超文本格式(CF_HTML),可用来向其他应用助手(如Excel,Word或其他办公应用复制)提供数据.

CF_HTML是包含说明,环境和该环境中的片段完全基于文本的格式.生成要发送到剪切板的数据时,必须包含数据说明,以指示剪切板版本及环境和片段的偏移.
计算偏移可能是难点.但是,可如下简化此任务.

代码示例

cpp 复制代码
//`CopyHtml()`,在`剪切板`上复制`超文本`.提供了`HTML/BODY`空白,所以只需像`CallHtml("<b>Thisisatest</b>"); `这样调用

void CopyHTML(char *html)
{
//为`超文本`头创建一个`临时缓冲`...
    char *buf = new char [400 + strlen(html)];
    if(!buf) return;
//取`剪切板``ID`以取`超文本`格式...
    static int cfid = 0;
    if(!cfid) cfid = RegisterClipboardFormat("HTML Format");
//为`超文本`头创建一个模板串...
    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");
//附加`超文本`...
    strcat(buf, html);
    strcat(buf, "\r\n");
//完成`超文本`格式...
    strcat(buf,
        "<!-EndFragment-->\r\n"
        "</body>\r\n"
        "</html>");
    //现在回来计算所有长度,并写必要的`头`信息.注意,`wsprintf()`在你覆盖串时会截断它,所以你会用用`'\r'`代码替换结尾的0...  
    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';
//现在已准备好`所有东西`,可在`剪切板`上放置东西了.打开`剪切板`...
    if(OpenClipboard(0))
    {
//清空里面...
        EmptyClipboard();
//分配全局内存传输...
        HGLOBAL hText = GlobalAlloc(GMEM_MOVEABLE |GMEM_DDESHARE, strlen(buf)+4);
//把你的串放进全局内存...
        char *ptr = (char *)GlobalLock(hText);
        strcpy(ptr, buf);
        GlobalUnlock(hText);
        ::SetClipboardData(cfid, hText);
        CloseClipboard();
//释放内存...
        GlobalFree(hText);
    }
//清理...
    delete [] buf;
}

使用此函数,在剪切板中复制超文本代码,可如下:

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

细节

使用向剪切板发送超文本代码的方法,可能自动化办公的客户特别有利.

如,如果你的自动化客户需要为Excel中的单元格或字中的段生成格式化数据,则可在超文本代码中生成数据,把它发送到剪切板,然后把它粘贴到应用中.

相关推荐
xier_ran9 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
jimy110 小时前
c++的 Type Traits (一)
开发语言·c++
别动我齐刘海11 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
ZZHow102412 小时前
Ascend C算子开发(高级)笔记
c++·人工智能·笔记·深度学习·华为云
aqiu11111113 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
lojox13 小时前
深入理解 C++ STL:vector 底层实现、迭代器失效与 list 特性
开发语言·c++
微笑星河q14 小时前
C++类和对象(下)初始化列表、类型转换、static、友元、内部类、匿名对象
开发语言·c++
|_⊙14 小时前
C++ 类和对象零散知识点
开发语言·c++
xiangyun6114 小时前
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法
开发语言·数据库·c++·算法·stl·list
坤坤子吖16 小时前
Linux 进程信号入门——从 Ctrl+C 到 kill
linux·开发语言·c++·笔记·学习