我有一种情况,我想向对话框添加
CMFCLinkCtrl
。但我希望它像按钮一样工作,所以当我单击链接时,我可以显示一个对话框。
最终此链接控件将位于状态栏控件的面板上。为了进行测试,我只是创建一个对话框项目并将链接控件拖到其上。
在 IDE 中它列出了
BN_CLICKED
但它似乎没有触发。
我只能看到调试输出:
atlTraceGeneral - 无法打开 URL:MfcLink1
我尝试声明自己的类,派生自
CMFCLinkCtrl
并添加此 protected
方法:
BOOL CMyMFCLinkCtrl::OnClicked()
{
AfxMessageBox(L"Hi");
return 0;
}
因为我在MFC源代码中看到了它,但这也没有被拦截。
BN_CLICKED
通知始终发送到控件的父级。为了能够处理控件中的消息,其父级需要选择加入消息反射。该功能允许在子控件窗口或父窗口或两者中处理通知。
要启用消息反射,父级的消息映射必须包含
ON_CONTROL_REFLECT()
或 ON_CONTROL_REFLECT_EX()
之一,例如 ON_CONTROL_REFLECT_EX(BN_CLICKED, &CMyMFCLinkCtrl::OnClicked)
。这可确保 BN_CLICKED
消息通过控件的消息处理程序进行路由。