gpt4 book ai didi

pointers - 如何将 lParam 转换为多个结构?

转载 作者:行者123 更新时间:2023-12-01 16:16:05 26 4
gpt4 key购买 nike

我在here中看到了下面这段代码。我测试了一下,一切正常。

// g_hLink is the handle of the SysLink control.
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code) // CAST TO NMHDR*
{
case NM_CLICK: // Fall through to the next case.
case NM_RETURN:
{
PNMLINK pNMLink = (PNMLINK)lParam; // CAST TO NMLINK*
LITEM item = pNMLink->item;
if ((((LPNMHDR)lParam)->hwndFrom == g_hLink) && (item.iLink == 0))
{
ShellExecute(NULL, L"open", item.szUrl, NULL, NULL, SW_SHOW);
}
else if (wcscmp(item.szID, L"idInfo") == 0)
{
MessageBox(hDlg, L"This isn't much help.", L"Example", MB_OK);
}
break;
}
}
break;

参数lParam被转换为NMHDR*NMLINK*类型。 WM_NOTIFY的文档消息说 lParam 可以转换为 NMHDR*,但 NMLINK 是封装 NMHDR 的不同结构。

当我们将 lParam 转换为这两者之间任意选择的结构时,实际上会发生什么?

最佳答案

NMLINK 包含 NMHDR 作为其第一个元素:

struct NMLINK {
NMHDR hdr;
LITEM item;
};

因此,指向 NMLINK 的指针等于指向其第一个成员的指针(这是位于偏移量 0 处的 NMHDR 结构),它们是相同的。这意味着您可以将 NMHDR* 转换到 NMLINK*。

关于pointers - 如何将 lParam 转换为多个结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061504/

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