如何禁用MFC链接控件的默认行为?
我在基于对话框的应用程序中使用MFC链接控件,我为它添加了一个BN_CLICKED事件处理程序,希望它能为我做些什么,但是,当我单击它时,它什么也不做(当我没有设置它的url时,当我设置url时,它将跳转到该url),我的事件处理程序不会被触发。那么,如何禁用其默认的“跳转”行为并触发我的处理程序呢?子类化如何禁用MFC链接控件的默认行为?,mfc,hyperlink,controls,Mfc,Hyperlink,Controls,我在基于对话框的应用程序中使用MFC链接控件,我为它添加了一个BN_CLICKED事件处理程序,希望它能为我做些什么,但是,当我单击它时,它什么也不做(当我没有设置它的url时,当我设置url时,它将跳转到该url),我的事件处理程序不会被触发。那么,如何禁用其默认的“跳转”行为并触发我的处理程序呢?子类化CMFCLinkCtrl,并在\u WM\u LBUTTONDOWN事件处理程序上添加一个 然后,您可以选择是否调用CMFCLinkCtrl::OnLButtonDown class CMyL
CMFCLinkCtrl
,并在\u WM\u LBUTTONDOWN事件处理程序上添加一个
然后,您可以选择是否调用CMFCLinkCtrl::OnLButtonDown
class CMyLinkCtrl : public CMFCLinkCtrl {
DECLARE_DYNAMIC(CMyLinkCtrl)
public:
CMyLinkCtrl();
virtual ~CMyLinkCtrl();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
protected:
DECLARE_MESSAGE_MAP()
};
IMPLEMENT_DYNAMIC(CMyLinkCtrl, CMFCLinkCtrl)
CMyLinkCtrl::CMyLinkCtrl() {
}
CMyLinkCtrl::~CMyLinkCtrl() {
}
BEGIN_MESSAGE_MAP(CMyLinkCtrl, CMFCLinkCtrl)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CMyLinkCtrl::OnLButtonDown(UINT nFlags, CPoint point) {
static bool bDisabled = false;
if(bDisabled) {
MessageBox(_T("Link is disabled"));
} else {
CMFCLinkCtrl::OnLButtonDown(nFlags, point);
}
bDisabled = !bDisabled;
}
非常感谢。子类化工作!但有一个小问题,当我添加行“AfxMessageBox(_T(“youclicked”);”时在默认的OnButtonDown处理程序中,它在我单击时弹出,但它没有跳转,但我没有注释掉默认的CMFCLinkCtrl::OnButtonDown处理程序的调用。CMFCLinkCtrl可能正在等待LBUTTONDOWN之后的另一条消息,该消息在消息框聚焦时不会触发。尝试使用Spy++(来自Visual Studio)来比较发送到LinkCtrl的消息序列。我想要一个简单的方法,让我的链接控件在单击时处理。为此,我简单地派生了一个类,并在其构造函数上将m_-bDefaultClickProcess
设置为TRUE
。它很好用!:)