如何使用 WTL::CHyperLink

How do I use WTL::CHyperLink?

本文关键字:CHyperLink WTL 何使用      更新时间:2023-10-16

我正在尝试使用WTL::CHyperLink,以便在我的应用程序上显示可点击的链接。

根据本文,我需要将其附加到静态文本控件。

因此,在我的 GUI 中,我现在已经创建了一个 ID 为 IDC_LINK 的静态文本控件

在我的DDX地图中:

BEGIN_DDX_MAP(MyDialog)
    DDX_CONTROL_HANDLE(IDC_LINK, m_link)
END_DDX_MAP()

并作为成员变量:

CHyperLink m_link;

但是,我总是留下这个:

Error C2679: Binary Operator '=': No operator accepting a right-hand operant of type 'ATL::CWindow' (or no suitable conversion possible)

有谁知道我做错了什么?

WTL CHyperLink 是一个自定义控件实现类,与 CEdit 等其他类不同,它们是薄HWND包装器,您无法通过使用带有窗口句柄的赋值运算符(这是 map 尝试执行的操作DDX_CONTROL_HANDLE并且仅通过一般操作窗口句柄来初始化控件。您应该从头开始创建一个控件窗口(CHyperLink::Create),或者采用预先创建的静态控件并使用CHyperLink::SubclassWindow对其进行子类化。

由于对话框模板中已经存在静态控件(该控件应该支持超链接),因此可以尝试使用宏而不是DDX_CONTROL_HANDLE DDX_CONTROL因为它尝试通过使用SubclassWindow调用进行子类化来初始化。

非 DDX 初始化代码片段如下:WM_INITDIALOG处理程序中的 SubclassWindow + SetHyperLink 调用。

您之前问过类似的问题:尝试将控件与DDX_CONTROL挂钩时出错 当时您以另一种方式混淆了相同的两个 DDX 宏......