Skip to content

链接控件 (SLink)

Warning

The current page still doesn't have a translation for this language.

You can read it through google translate.

链接控件提供了类似HTML链接的功能,可以在点击时触发特定操作或跳转到指定URL。

基本信息

  • 类名SLink
  • 控件标签link
  • 基类SWindow
  • 功能:提供链接功能

属性说明

自身属性

属性名 类型 默认值 说明
href string - 链接跳转 URL。由 ATTR_STRINGT 直接存入 m_strLinkUrl,鼠标左键释放时用 ShellExecute 打开;href 为空时退化为打开控件文本

href 与 tip 的关系

SLink::OnInitFinished() 中,若未显式设置 tip,控件会把 href 的值作为默认的悬浮提示文本。

命中区域

鼠标事件(按下/抬起/悬停/设置光标)都会先判断点是否落在文本矩形 m_rcText 内,落在文本之外不响应。 文本矩形由 align 决定(left/center/right),宽度等于文本实际宽度。

继承自 SWindow / SwndStyle / 布局参数的通用属性,见通用属性

使用示例

基本链接

<link pos="10,10,200,30" 
      name="link_basic"
      href="https://github.com/SOUI2/soui" 
      colorText="#0000FF" 
      colorTextHover="#000088"
      cursor="hand">
    访问SOUI GitHub
</link>

带下划线的链接

<link pos="10,40,200,60" 
      name="link_underline"
      href="https://soui.github.io"
      colorText="#0000FF"
      colorTextHover="#FF0000"
      font="underline:1"
      fontHover="underline:1,bold:1"
      cursor="hand">
    访问SOUI文档
</link>

自定义样式的链接

<link pos="10,70,200,90" 
      name="link_styled"
      href="https://github.com"
      colorText="#333333"
      colorTextHover="#007ACC"
      font="italic:1"
      fontHover="underline:1,italic:1"
      cursor="hand">
    GitHub链接
</link>

事件处理

链接控件主要响应以下事件:

事件名 EventID 说明
EVT_CMD EventCmd::EventID 命令事件(点击时触发)
EVT_MOUSE_HOVER EventMouse::EventID 鼠标悬停事件
EVT_MOUSE_LEAVE EventMouse::EventID 鼠标离开事件
// 事件处理示例
EVENT_MAP_BEGIN()
    EVENT_NAME_COMMAND(L"link_basic", OnLinkClick)
EVENT_MAP_END()

bool CMainDlg::OnLinkClick()
{
    SLink *pLink = FindChildByName2<SLink>(L"link_basic");
    SStringT strHref = pLink->GetHref();
    // 处理链接点击,例如打开浏览器
    ShellExecute(NULL, L"open", strHref, NULL, NULL, SW_SHOWNORMAL);
    return true;
}

代码操作

// 查找链接控件
SLink *pLink = FindChildByName2<SLink>(L"link_basic");

// 设置链接地址
pLink->SetHref(L"https://new-url.com");

// 获取链接地址
SStringT strHref = pLink->GetHref();

// 设置链接文本
pLink->SetWindowText(L"新链接文本");

// 获取链接文本
SStringT strText = pLink->GetWindowText();

// 设置文本颜色
pLink->SetAttribute(L"colorText", L"#FF0000");
pLink->SetAttribute(L"colorTextHover", L"#00FF00");

最佳实践

  1. 视觉一致性:使用标准的链接颜色(如蓝色)和悬停效果
  2. 光标提示:设置 cursor 为 "hand" 以提供明确的交互提示(见通用属性
  3. 下划线效果:通过 font 属性添加下划线增强链接识别度
  4. URL验证:在处理链接点击时验证URL的有效性

常见问题

Q: 链接点击无反应怎么办?

A: 确保正确处理了 EVT_CMD 事件,并在事件处理函数中实现跳转逻辑。

Q: 鼠标悬停效果不明显怎么办?

A: 检查是否设置了 colorTextHoverfontHover 属性,并确认父链上的 hoverAware 为 true(见通用属性)。

Q: 链接文本显示不完整怎么办?

A: 确保控件宽度足够显示文本,或调整字体大小。

相关控件