将嵌入式结构复制到剪贴板并在win32中检索它

时间:2013-05-14 19:17:18

标签: winapi visual-c++ data-structures clipboard

我正在尝试在win32窗口上实现剪贴板操作(剪切/复制/粘贴)。这个窗口上面有一堆gdi对象,窗口也可以插入子控件。

我在win32剪贴板API上搜索了allot,并且他们已经解释了如何处理单一类型的数据,例如:我们可以通过指定适当的剪贴板格式等将文本写入剪贴板。

我需要的是将所有数据放在剪贴板上,用于在粘贴操作后重建原始窗口。我不想像msdn建议的那样使用COM来嵌入数据结构。

可以使用基本剪贴板API执行此操作吗?任何人都可以指出我正确的方向,我需要采取什么步骤才能实现这一目标?我是win32的新手,不知道我在做什么。

1 个答案:

答案 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);