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++ - 将超链接添加到窗口的主要内容,如果未能解决你的问题,请参考以下文章