我想使编辑框响应鼠标单击,于是从CEdit派生了一个类CSubEdit,然后用vc向导为该类重载了单击消息处理函数OnLButtonDown,但是发现,如果在该函数中调用MessageBox("aa");之类的函数,就会点击父对话框的任何位置都会调用CEdit类的OnLButtonDown,也就是会不停的调用MessageBox("aa");请问这是为什么?
代码如下:
void CSubEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//CDialog dlg(IDD_DIALOG1);
//dlg.DoModal();
MessageBox("aa");
CEdit::OnLButtonDown(nFlags, point);
}
代码如下:
void CSubEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//CDialog dlg(IDD_DIALOG1);
//dlg.DoModal();
MessageBox("aa");
CEdit::OnLButtonDown(nFlags, point);
}
BEGIN_MESSAGE_MAP(CSubEdit, CEdit)
//{{AFX_MSG_MAP(CSubEdit)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);
恩我明白了,但是这样做还有一个小问题,就是关闭了AfxMessageBox(...); 之后,鼠标的光标形状移到CSubEdit之外,仍然是"I"的形状,必须得再点击一次才会变回箭头形状
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("aaa");
CEdit::OnLButtonDown(nFlags, point);
}
把CEdit::OnLButtonDown(nFlags, point);注释掉就可以了
"把CEdit::OnLButtonDown(nFlags, point);注释掉就可以了"我就是这么改的,但是不知道这么改的原理是什么,CEdit::OnLButtonDown(nFlags, point);都作了什么?