我如何使用WTL :: CHyperLink?

Sos*_*der 2 c++ mfc wtl atl

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

根据这篇文章,我需要将它附加到静态文本控件.

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

在我的DDX MAP中:

BEGIN_DDX_MAP(MyDialog)
    DDX_CONTROL_HANDLE(IDC_LINK, m_link)
END_DDX_MAP()
Run Code Online (Sandbox Code Playgroud)

并作为成员变量:

CHyperLink m_link;
Run Code Online (Sandbox Code Playgroud)

但是,我总是留下这个:

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

有谁知道我做错了什么?

Rom*_* R. 5

WTL CHyperLink是一个自定义控件实现类,与其他类(如CEditHWND包装器)不同,您无法通过使用具有窗口句柄的赋值运算符(这是DDX_CONTROL_HANDLE映射尝试执行的操作)来初始化控件,并且通常仅通过操作窗口句柄来初始化控件.您应该从scratch(CHyperLink::Create)创建一个控制窗口,或者使用预先创建的静态控件并将其子类化CHyperLink::SubclassWindow.

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

非DDX初始化代码片段在这里:SubclassWindow+ 处理程序中的SetHyperLink调用WM_INITDIALOG.

您之前问了一个类似的问题:尝试使用DDX_CONTROL连接控件时出错当时您混淆了相同的两个DDX宏...