gpt4 book ai didi

c - SetProp 问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:26 25 4
gpt4 key购买 nike

谁能告诉我为什么下面的代码不起作用?我没有收到任何编译器错误。

short value = 10;
SetProp(hCtl, "value", (short*) value);

最佳答案

第三个参数的类型是HANDLE,因此IMO为了满足函数的明确约定,您应该通过分配将属性保存为HANDLE HGLOBAL 内存块。但是,正如下面评论中指出的那样,MSDN 声明可以指定任何值,事实上,当我在 Windows 7 上尝试使用...

SetProp(hWnd, _T("TestProp"), (HANDLE)(10)); // or (HANDLE)(short*)(10)
...
(short)GetProp(hWnd, _T("TestProp"));

...我从 GetProp 取回 10。我怀疑在您的 SetProp 和 GetProp 之间发生了以下两种情况之一:(1) hWnd 的值不同——您正在检查不同的窗口或 (2) 计时问题——该属性尚未设置或已被删除。


如果您想使用HGLOBAL 代替函数签名的特定类型,您可以关注this example in MSDN。 .

尽管 HANDLE 只是一个指针,但它是一种通过调用 Windows API 分配的特定数据类型。很多东西都有句柄:图标、光标、文件……除非文档明确另有说明,否则在函数调用 HANDLE< 时使用诸如 short 之类的数据 block ,你需要一个内存句柄(HGLOBAL)。

上面链接的示例代码将数据复制为字符串,但您可以将其设置为另一种数据类型:

// TODO: Add error handling
hMem = GlobalAlloc(GPTR, sizeof(short));
lpMem = GlobalLock(hMem);
if (lpMem != NULL)
{
*((short*)lpMem) = 10;
GlobalUnlock(hMem);
}

要读回它,当您GetProp 获取HANDLE 时,您必须锁定它才能读取内存:

// TODO: Add error handling
short val;
hMem = (HGLOBAL)GetProp(hwnd, ...);
if (hMem)
{
lpMem = GlobalLock(hMem);
if (lpMem)
{
val = *((short*)lpMem);
}
}

关于c - SetProp 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5917069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com