0

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

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

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

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

4

1 回答 1

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);
于 2013-05-14T20:42:00.570 回答