2016-01-24 45 views
2

我正在尝试使用WTL :: CHyperLink为了在我的应用程序上显示可点击的链接。如何使用WTL :: CHyperLink?

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

所以,在我的GUI,我现在已经创建了IDC_LINK

的ID

在我的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) 

有谁知道我在做什么错?

+0

是,像标准的'SysLink'控制? –

+0

@BarmakShemirani我其实不知道,WTL的记录太糟糕了,我不知道比我发现的要多得多 – Sossenbinder

+0

那篇文章很老了,也许你只需要SysLink,你可以在对话框资源编辑器中拖放控件或者看到这个[** link **](https://msdn.microsoft.com/en-us/library/windows/desktop/hh298379%28v=vs.85%29.aspx)。此外请确保[清单](http://stackoverflow.com/a/32729776/4603670)设置正确 –

回答

5

WTL CHyperLink是一个自定义的控制实现类不像其他类,如CEdit,这是薄HWND包装,你无法初始化使用赋值运算符与窗口的句柄(这是什么DDX_CONTROL_HANDLE地图试图做)的控制,并通过公正一般只能操作窗户把手。您应该从头创建一个控制窗口(CHyperLink::Create),或者采用预先创建的静态控件并使用CHyperLink::SubclassWindow对其进行子类化。

使用静态控制已经在对话框模板,这是应该备份您现有的超链接,你可以尝试DDX_CONTROL宏,而不是DDX_CONTROL_HANDLE,因为它试图利用SubclassWindow调用子类进行初始化。

非DDX初始化代码片段为hereSubclassWindow + SetHyperLink调用WM_INITDIALOG处理程序。

你问过类似的问题之前:Error when trying to hook up a control with DDX_CONTROL那时,你混淆了两个相同的DDX宏的其他方式...

+0

谢谢,使用DDX_CONTROL工作完美。我最近才开始用WTL来做图形用户界面,并且很难跟踪我所遇到并学到的所有东西。 – Sossenbinder

相关问题