このコードは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
の両方にキャストされます。messageのドキュメントには、にキャストできると記載されていますが、 をカプセル化する別の構造です。NMHDR*
NMLINK*
WM_NOTIFY
lParam
NMHDR*
NMLINK
NMHDR
lParam
これら 2 つの間で任意に選択された構造にキャストすると、実際には何が起こるでしょうか?