覆盖 CMFCLinkCtrl 单击行为

问题描述 投票:0回答:1

我有一种情况,我想向对话框添加

CMFCLinkCtrl
。但我希望它像按钮一样工作,所以当我单击链接时,我可以显示一个对话框。

最终此链接控件将位于状态栏控件的面板上。为了进行测试,我只是创建一个对话框项目并将链接控件拖到其上。

在 IDE 中它列出了

BN_CLICKED
但它似乎没有触发。

我只能看到调试输出:

atlTraceGeneral - 无法打开 URL:MfcLink1

我尝试声明自己的类,派生自

CMFCLinkCtrl
并添加此
protected
方法:

BOOL CMyMFCLinkCtrl::OnClicked()
{
    AfxMessageBox(L"Hi");

    return 0;
}

因为我在MFC源代码中看到了它,但这也没有被拦截。

visual-c++ hyperlink mfc
1个回答
0
投票

BN_CLICKED
通知始终发送到控件的父级。为了能够处理控件中的消息,其父级需要选择加入消息反射。该功能允许在子控件窗口或父窗口或两者中处理通知。

要启用消息反射,父级的消息映射必须包含

ON_CONTROL_REFLECT()
ON_CONTROL_REFLECT_EX()
之一,例如
ON_CONTROL_REFLECT_EX(BN_CLICKED, &CMyMFCLinkCtrl::OnClicked)
。这可确保
BN_CLICKED
消息通过控件的消息处理程序进行路由。

© www.soinside.com 2019 - 2024. All rights reserved.