复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123void TestManualFormatClipboard() { //自定义数据结构体 typedef struct _MYSTRUCT { CHAR charVal[16]; int iVal; long lVal; double fVal; }MYSTRUCT, *LPMYSTRUCT; MYSTRUCT wrStruct = {"ABCD", 0, 1, 2.0}; MYSTRUCT rdStruct = {"DCBA", 0, 2, 4.0}; DWORD dwError = 0; UINT uFormat = 0; //注册自定义格式 if(dwError == 0) { uFormat = RegisterClipboardFormat(_T("TestManulaFormat")); if(uFormat == 0)//注册格式失败 { dwError = GetLastError(); TRACE(_T("RegisterClipboardFormat Error (%ld)n"), dwError); } } //将数据写入剪切板 if(dwError == 0) { if(OpenClipboard(NULL))//打开剪切板 { if(EmptyClipboard())//清空剪切板 { DWORD dwSize = sizeof(wrStruct); HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, dwSize); //分配内存 if(hMem)//分配内存有效 { memcpy(GlobalLock(hMem), &wrStruct, dwSize);//拷贝数据 GlobalUnlock(hMem);//解锁 if(SetClipboardData(uFormat, hMem) == NULL) //数据写入剪切板 { dwError = GetLastError(); TRACE(_T("SetClipboardData Error for write(%ld)n"), dwError); } } else //分配内存出错 { dwError = GetLastError(); TRACE(_T("GlobalAlloc Error for write(%ld)n"), dwError); } } else //清空剪切板失败 { dwError = GetLastError(); TRACE(_T("EmptyClipboard Error for write(%ld)n"), dwError); } if(!CloseClipboard())//关闭剪切板 { dwError = GetLastError(); TRACE(_T("CloseClipboard Error for write(%ld)n"), dwError); } } else//打开剪切板失败 { dwError = GetLastError(); TRACE(_T("OpenClipboard Error for write(%ld)n"), dwError); } } //从剪切板读出数据 if(dwError == 0) { if(OpenClipboard(NULL)) //打开剪切板 { if(IsClipboardFormatAvailable(uFormat))//检查格式有效 { HGLOBAL hMem = GetClipboardData(uFormat);//读取数据句柄 if(hMem != NULL) { memcpy(&rdStruct, GlobalLock(hMem), sizeof(rdStruct));//读出数据 GlobalUnlock(hMem);//解锁 } else//读取句柄失败 { dwError = GetLastError(); TRACE(_T("GetClipboardData Error for read (%ld)n"), dwError); } } else//格式无效 { dwError = GetLastError(); TRACE(_T("IsClipboardFormatAvailable Error for read (%ld)n"), dwError); } if(!CloseClipboard())//关闭剪切板 { dwError = GetLastError(); TRACE(_T("CloseClipboard Error for read (%ld)n"), dwError); } } else //打开剪切板失败 { dwError = GetLastError(); TRACE(_T("OpenClipboard Error for read (%ld)n"), dwError); } } //比较数据 if(dwError == 0) { if(memcmp(&wrStruct, &rdStruct, sizeof(wrStruct))==0)//相等 { } else { TRACE(_T("failed to compare data!n")); ASSERT(FALSE); } } }
最后
以上就是尊敬小刺猬最近收集整理的关于在剪切板中使用自定义格式的数据的全部内容,更多相关在剪切板中使用自定义格式内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复