我在这里看到了下面这段代码.我测试了它,它可以正常工作.
// 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; …Run Code Online (Sandbox Code Playgroud) 我开始使用 c++ 语言学习 winapi。我试图了解lParamWM_KEYDOWN 消息。
来自微软文档:
0-15:当前消息的重复计数。该值是由于用户按住键而自动重复击键的次数。如果击键时间足够长,则会发送多条消息。但是,重复计数不是累积的。
16-23 : 扫描码。该值取决于 OEM。
24:指示该键是否为扩展键,例如出现在增强型 101 键或 102 键键盘上的右侧 ALT 和 CTRL 键。如果是扩展键,则值为 1;否则为 0。
25-28:保留;不使用。
29:上下文代码。WM_KEYDOWN 消息的值始终为 0。
30 : 前一个键状态。如果在发送消息之前键处于关闭状态,则值为 1,如果键处于向上状态,则值为 0。
31:过渡状态。WM_KEYDOWN 消息的值始终为 0。
我正在通过这种方式处理此消息:
case WM_KEYDOWN:
cout << ((lParam & 0b11111111111111110000000000000000) >> 16) << ", ";
cout << ((lParam & 0b00000000000000001111111100000000) >> 8) << ", ";
cout << ((lParam & 0b00000000000000000000000010000000) >> 7) << ", ";
cout << ((lParam & 0b00000000000000000000000000000100) >> …Run Code Online (Sandbox Code Playgroud)