我正在尝试在win32窗口上实现剪贴板操作(剪切/复制/粘贴)。这个窗口上面有一堆gdi对象,窗口也可以插入子控件。
我在win32剪贴板API上搜索了allot,并且他们已经解释了如何处理单一类型的数据,例如:我们可以通过指定适当的剪贴板格式等将文本写入剪贴板。
我需要的是将所有数据放在剪贴板上,用于在粘贴操作后重建原始窗口。我不想像msdn建议的那样使用COM来嵌入数据结构。
可以使用基本剪贴板API执行此操作吗?任何人都可以指出我正确的方向,我需要采取什么步骤才能实现这一目标?我是win32的新手,不知道我在做什么。
答案 0 :(得分:3)
使用RegisterClipboardFormat()
注册自定义剪贴板格式ID。然后根据需要序列化您的数据,使用对您的数据有意义的任何序列化格式,并使用SetClipboardData()
将其存储在剪贴板上。稍后,您可以使用GetCliipboardData()
检索数据并根据需要对其进行反序列化。
更新:例如:
struct sMyData
{
int Value1;
int Value2;
float Value3;
float Value4;
};
UINT uMyDataFmtID = RegisterClipboardFormat(TEXT("MyData"));
...
HANDLE hMyData = GlobalAlloc(GHND, sizeof(sMyData));
sMyData *pMyData = (sMyData*) GlobalLock(hMyData);
// fill in pMyData as needed...
GlobalUnlock(hMyData);
SetClipboardData(uMyDataFmtID, hMyData);
...
HANDLE hMyData = GetClipboardData(uMyDataFmtID);
sMyData *pMyData = (sMyData*) GlobalLock(hMyData);
// use pMyData as needed...
GlobalUnlock(hMyData);