【核心代码】
// RXData.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "RubyMarshal.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ostringstream stream; // 这是一个字符串的缓冲区
RubyMarshal rms(&stream);
rms.WriteHeader(); // 写入Marshal的版本号4.8
rms.BeginArray(1); // 整个剪切板的内容是一个单元素数组
// ---- 从下面开始都是这个大数组的第一个元素的值 ------
rms.BeginObject("RPG::EventCommand", 3); // 这个数组的唯一元素是一个RPG::EventCommand对象的实例,该对象有3个成员变量
rms.BeginMember("code"); // 第一个成员变量code指定了事件指令编号
rms.WriteFixnum(101); // “显示文章”的编号为101
rms.BeginMember("indent"); // 第二个成员变量indent指定了事件指令在事件编辑器中的缩进程度
rms.WriteFixnum(0); // 缩进为0
rms.BeginMember("parameters"); // 第三个成员变量是事件指令的参数
rms.BeginArray(1); // 该成员变量的值是一个单元素数组
rms.WriteString("This is a string."); // 数组的唯一元素是一个字符串,指定了显示文章的内容
// 注意,文章内容的编码必须是UTF8编码格式(准确的说是Unicode编码的UTF8存储方式)
// 在C++中,char字符数组可以存储任何编码的字符串,默认的编码是ANSI编码,而wchar_t字符数组存储的字符串编码一般为Unicode编码的UTF16存储方式。因此,使用wchar_t或wstring来存储字符串时,可以先将UTF16存储方式用WideCharToMultiByte函数转换为UTF8存储方式,最后再传入WriteString方法里
// --------------------------------------------------
rms.Copy(CF_RPGXPEVENTCOMMAND); // 复制到剪切板中,括号中是剪切板的格式编号
return 0;
}
【运行程序后生成的剪切板内容】