c++ - 我如何使用 WTL::CHyperLink?

标签 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)

有人知道我做错了什么吗?

最佳答案

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

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

非DDX初始化代码片段是here : SubclassWindow + SetHyperLinkWM_INITDIALOG 处理程序中调用。

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

关于c++ - 我如何使用 WTL::CHyperLink?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970545/

相关文章:

c++ - 如何用参数重载 '=' 运算符?

c++ - 使用 std::setw 后从流输出时如何清除宽度?

assembly - 通过程序集隐藏消息框

c++ - VERIFY 和 ATLVERIFY 有什么区别

c++ - stat() 中 UID 的错误值和 psinfo_t 中错误的 pr_pid

c++ - 默认构造函数阻止调用 emplace_back

c++ - 只允许在 MFC MDI 应用程序中打开一个 CDocument

c - WinAPI,发布/发送具有 64 位值的消息(wParam、lParam)

c++ - Tab 键在 IWebbrowser2 中不起作用

c++ - 即 bho IDispatchEx::调用失败