用GetClassInfo或GetClassInfoEx可以获取WNDCLASS或者WNDCLASSEX结构的指针,如果你设置了额外的数据,应该在分配WNDCLASSEX的时候紧跟在结构后面。这种用法很少:
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
|
int
nClsExtra = 100;
cosnt
TCHAR
pcszClassName[] = _T(
"ClassName"
);
WNDCLASSEX* pClsExtra = (WNDCLASSEX*)
new
char
[
sizeof
(WNDCLASSEX) + nClsExtra];
memset
(pClsExtra, 0,
sizeof
(WNDCLASSEX) + nClsExtra);
char
* pClsData = (
char
*)pClsExtra +
sizeof
(WNDCLASSEX);
// 这里,pClsData就可以保存额外的100字节数据,比如:
memcpy
(pClsData, pBuf, 100);
pClsExtra->cbSize =
sizeof
(WNDCLASSEX);
pClsExtra->cbClsExtra = nClsExtra;
pClsExtra->lpszClassName = pcszClassName;
...
// 如常设置WNDCLASSEX各个成员。
RegisterClassEx(pClsExtra);
//
// 要取出数据,如下:
int
nClsExtraSize = (
int
)GetClassLong(hWnd, GCL_CBCLSEXTRA);
// 或者就用GetClassInfoEx先读取一个WNDCLASSEX结构,取得其中的cbClsExtra大小。
char
* pClsBuf =
new
char
[
sizeof
(WNDCLASSEX) + nClsExtraSize];
if
(GetClassInfoEx(hInst, pcszClassName, (WNDCLASSEX*)pClsBuf))
{
WNDCLASSEX* pClsExtra = (WNDCLASSEX*)pClsBuf;
char
* pClsData = pClsExtra +
sizeof
(WNDCLASSEX);
// 使用数据;
}
|