设置 CMFCLinkCtrl 的 URL 文本

问题描述 投票:0回答:1

如果我以编程方式创建一个

CMFCLinkCtrl
控件并在构造函数中分配文本,一切都很好。但如果我随后尝试将 URL 更改为其他内容,它不会在视觉上更新。根据
SetURL
的文档,它指出:

将指定的 URL 显示为按钮文本。

但是当您查看该控件的底层 MFC 源代码时,它所做的只是:

void CMFCLinkCtrl::SetURL(LPCTSTR lpszURL)
{
    if (lpszURL == NULL)
    {
        m_strURL.Empty();
    }
    else
    {
        m_strURL = lpszURL;
    }
}

在控件上调用

UpdateWindow();
Invalidate();
没有任何区别。然后我意识到 IDE 有 two 属性:

对于 Caption 是这样的:

指定控件显示的文本。

对于 URL 它指出:

指定链接控件的url字符串。

最后我只是这样做了:

m_linkStatusbarLocalCong.SetURL(strCongregation);
m_linkStatusbarLocalCong.SetWindowText(strCongregation);

现在一切正常。我在阅读文档时错过了什么吗?

visual-c++ hyperlink mfc
1个回答
0
投票

我在阅读文档时错过了什么吗?

不。 文档明确指出:

void SetURL(LPCTSTR lpszURL);

lpszURL

[in] 要显示的按钮文本。

那是一个谎言。

SetURL()
仅更新受保护类成员
m_strURL
,但不执行任何其他步骤。如果实现中的其他一切都正常,这就不是什么大问题,并且调用
UpdateWindow()
将使视觉表示与内部状态保持一致。

尽管如此,CMFCLinkCtrl的实现中的

没什么
是理智的。
OnDraw()
中的代码伸出手来读取窗口文本以进行显示,甚至从未考虑过
m_strPrefix
/
m_strURL

本质上,

SetWindowText()
控制显示的内容,
SetURLPrefix()
/
SetURL()
设置点击时启动的URL。您必须更新两者,以便显示与行为一致。

我不知道为什么 MFC 选择推出自己的

CMFCLinkCtrl
而不是包装本机 SysLink 控件。我确实知道它的执行非常草率。

© www.soinside.com 2019 - 2024. All rights reserved.