WinAPI - C++ - 将超链接添加到窗口

Posted

技术标签:

【中文标题】WinAPI - C++ - 将超链接添加到窗口【英文标题】:WinAPI - C++ - Add Hyperlink to Window 【发布时间】:2015-09-01 23:14:57 【问题描述】:

我想知道,如何将超链接(指向在线网页的链接)添加到我的窗口。我是否使用 CreateWindow、WM_PAINT 等?请给我一些建议。谢谢!

编辑: 这就是我正在做的事情:

HWND CreateSysLink(HWND hDlg, HINSTANCE hInst, RECT rect)
    return CreateWindowEx(0, WC_LINK,
                          "For more information, <A HREF=\"http://www.microsoft.com\">click here</A> " \
                          "or <A ID=\"idInfo\">here</A>.",
                          WS_VISIBLE | WS_CHILD | WS_TABSTOP,
                          rect.left, rect.top, rect.right, rect.bottom,
                          hDlg, NULL, hInst, NULL);

我通过在 WinMain 中运行 globalhInstance = hInstance; 将 hInstance 从 WinMain 参数复制到全局变量“globalhInstance”。我还创建了一个名为 globalRect 的全局 RECT。然后在 WM_CREATE 上,我调用 GetWindowRect(hwnd, &globalRect);(“hwnd”是 WndProc 的参数)。最后,在 WM_COMMAND 内的 switch 语句中,我调用 CreateSysLink(hwnd, globalhInstance, globalRect);。但这似乎不起作用。

【问题讨论】:

您在寻找SysLink common control吗? CreateWindowEx( 0x0, WC_LINK, ... ); 你能给我一些示例代码吗 如果它是一个对话框并且您有 Visual C++,那么您可以从工具箱中拖放“SysLink 控件”。 @JonathanPotter - 不,我只是将 RECT globalRect; 放在我的 .cpp 文件顶部的包含下方并调用 GetWindowRect(hwnd, &globalRect); 在 WM_CREATE 上。 【参考方案1】:

上面链接的 MSDN 页面中有 sample code:

HWND CreateSysLink(HWND hDlg, HINSTANCE hInst, RECT rect)

    return CreateWindowExW(0, WC_LINK, 
        L"For more information, <A HREF=\"http://www.microsoft.com\">click here</A> " \
        L"or <A ID=\"idInfo\">here</A>.", 
        WS_VISIBLE | WS_CHILD | WS_TABSTOP, 
        rect.left, rect.top, rect.right, rect.bottom, 
        hDlg, NULL, hInst, NULL);

【讨论】:

我知道,但我的编译器说:错误:无法将参数 '3' 转换为 'LPCSTR aka const char*' 到 'HWND__* CreateWindowExA(DWORD, LPCSTR, LPCSTR , DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID)' 顺便说一句,我使用 GNU GCC 编译器 该代码正在调用CreateWindowEx()TCHAR 版本,因此使用TEXT() 宏包装字符串文字,例如:return CreateWindowEx(0, WC_LINK, TEXT("For more information, ..."), ...);。否则,直接调用CreateWindowExW()WC_LINK 类不支持CreateWindowExA())传递宽字符串文字(以L 为前缀),例如:return CreateWindowExW(0, WC_LINK, L"For more information, ...", ...); 我不想抱怨,但用 Text() 包装它们编译得很好,但链接不会显示。使用 CreateWindowExW 和 L"" 显示相同的错误 @jadenPete 这是基本的 Win32 东西,创建子窗口。如果没有看到更多的代码,我们不知道可能出了什么问题。例如。您传递的坐标是否有效? @jadenPete 在创建 SysLink 控件之前,您必须调用 InitCommonControlsEx 函数,并指定 ICC_LINK_CLASS。 see here

以上是关于WinAPI - C++ - 将超链接添加到窗口的主要内容,如果未能解决你的问题,请参考以下文章

将超链接添加到 DataTables 中的列

如何使用插件将超链接添加到 onlyoffice 文档?

描述Setter插件 - 将超链接添加到网络文件夹

将超链接添加到 Angular 2 Toast 消息

使用 jQuery 将超链接添加到 WordPress 手风琴标题

JQuery 工具可滚动:无法将超链接添加到图像