- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
进行了大量研究,试图弄清楚如何让它正常工作。我读到如果您过滤 WM_NOTIFY -> NM_CLICK,它会捕获 syslink 的实际点击事件。问题是它捕获了事件,尽管它陷入了无休止的递归,并且在几秒钟内你有数百个浏览器窗口或链接打开为。
采取的步骤:
为 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/
我在 native c++ win32 应用程序中遇到一些不寻常的内存泄漏。它有一个对话框,其中包含一些文本和一些 URL 链接,这些链接是使用 SysLink 控件制作的。问题是当我单击系统链接时(
如果我在报告模式下有一个 listview 控件,我如何将 syslink 控件粘贴到其中一个列中? 我想要一个用户可以在其中一列中单击的链接。 最佳答案 listview 控件本身不支持这个。 您可
我正在为 Autodesk 3ds Max 写一个插件,一个 native 的、仅限 Windows 的应用程序。该插件是用 C++ 编写的,并使用原始 Win32 API 构建其用户界面,就像 3d
进行了大量研究,试图弄清楚如何让它正常工作。我读到如果您过滤 WM_NOTIFY -> NM_CLICK,它会捕获 syslink 的实际点击事件。问题是它捕获了事件,尽管它陷入了无休止的递归,并且在
我在设置 SysLink 控件的背景颜色时遇到问题。 我有一个分组框和几个 SysLink 控件。当我更改组框和 syslink 控件的背景色时,这就是它的样子... 最后出现一条白色的小线。即使调整
起初将系统链接添加到我的对话框中,阻止它打开。我被要求在我的代码中添加以下行以显示带有“Syslink”控件的对话框。 #pragma comment(linker,"\"/manifestdepen
普通静态有 SD_NOTIFY 用于接收(双击)点击。当单击其中的“正常”文本而不是链接时,我如何处理 Syslink 控件的相同事件? 最佳答案 我认为没有任何简单的方法。可能最简单的是 super
这是我的代码,但它没有编译并给出了两个错误: error C2440: '=' : cannot convert from 'WCHAR' to 'WCHAR [2084]' IntelliS
我是一名优秀的程序员,十分优秀!