gpt4 book ai didi

c++ - 如何为 Syslink 控制处理 NM_CLICK

转载 作者:行者123 更新时间:2023-11-30 00:56:13 32 4
gpt4 key购买 nike

进行了大量研究,试图弄清楚如何让它正常工作。我读到如果您过滤 WM_NOTIFY -> NM_CLICK,它会捕获 syslink 的实际点击事件。问题是它捕获了事件,尽管它陷入了无休止的递归,并且在几秒钟内你有数百个浏览器窗口或链接打开为。

采取的步骤:

  1. 在对话框中创建 Syslink
  2. 为 Syslink 控制链接添加标题并将 IDD 更改为 IDC_LINK1
  3. 为 NM_CLICK 事件过滤 WM_NOTIFY

       case WM_NOTIFY:
    //case NM_CLICK:
    switch(LOWORD(wParam))
    {
    case NM_CLICK:
    switch(LOWORD(wParam))
    {
    case IDC_LINK1:
    // Standard ShellExecute with added check for IsLinkCtrl to make sure its the right kind of control.
    OpenLink(hWndDlg, LOWORD(wParam));
    break;
    }
    break;
    }
    break;

我想我真正的问题是如何正确执行此操作?我没有看到任何很好的示例来说明如何正确过滤 Syslink 以将链接作为 url 执行。

最佳答案

澄清一下,我不认为您使用的是托管 C++,因为我不确定您为什么将 NM_CLICK 通知代码称为事件。此外,您不必捕获任何东西,您不处理任何异常,您只是处理 WM_NOTIFY 消息。

无论如何,我不确定您为什么会遇到这种特殊行为,因为我没有看到您在代码片段之外做了什么,但我知道是什么导致了它。在我们的代码片段中,您使用 wParam 来确定通知代码,这是不正确的。此控件不使用 wParam。要确定通知代码,您应该执行以下操作:

    NMHDR* pHeader = (NMHDR*)lParam;

switch (pHeader->code)

pHeader->code 保存您应该使用的通知代码值,pHeader->hwndFrom 是被点击的控件的句柄。

此外,您再次使用 LOWORD(wParam) 并将其作为参数传递给函数调用。你没有展示你在这个函数中做了什么,但我可以得出结论,代码也不正确。同样的lParam是指向NMLINK结构的指针。该结构的第一个成员是上面提到的 NMHDR,下一个成员是 LITEM 结构,应该用于确定 URL 是什么。

    NMLINK* pNMLink = (NMLINK*)lParam;
LITEM iItem = pNMLink->item;

item.szUrl 是您应该在调用 ShellExecute 调用打开时使用的 URL。

关于c++ - 如何为 Syslink 控制处理 NM_CLICK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726099/

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