我如何使用WTL :: CHyperLink?

时间:2016-01-24 00:01:32

标签: c++ mfc atl wtl

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

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

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

在我的DDX MAP中:

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)

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:5)

WTL CHyperLink是一个自定义控件实现类,与其他类CEdit不同,它们是精简HWND包装器,您不能通过使用带窗口句柄的赋值运算符来初始化控件(是DDX_CONTROL_HANDLE映射尝试做的事情)并且只是一般地操纵窗口句柄。您应该从头开始创建一个控制窗口(CHyperLink::Create),或者使用预先创建的静态控件并使用CHyperLink::SubclassWindow对其进行子类化。

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

非DDX初始化代码段是hereSubclassWindow + SetHyperLink WM_INITDIALOG处理程序中的{{1}}次调用。

之前你问了一个类似的问题:Error when trying to hook up a control with DDX_CONTROL当时你把另外两个DDX宏混淆了......