CEdit控件类响应鼠标消息的问题!

美伊小公主的奶爸 2009-01-06 10:38:39
我想使编辑框响应鼠标单击,于是从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);
}
...全文
396 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger波波 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hityct1 的回复:]
这是因为焦点在Edit上的缘故,你可以试一下,如果焦点不在Edit上,不不会弹出对话框了。
[/Quote]
我一开始也这么想,可是不行,你怎么试的?我用Tab建把焦点移调还是不行
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 youyingbo 的回复:]
void CMyEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("aaa");
CEdit::OnLButtonDown(nFlags, point);
}
把CEdit::OnLButtonDown(nFlags, point);注释掉就可以了
[/Quote]

"把CEdit::OnLButtonDown(nFlags, point);注释掉就可以了"我就是这么改的,但是不知道这么改的原理是什么,CEdit::OnLButtonDown(nFlags, point);都作了什么?
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 starytx 的回复:]
引用 5 楼 cymvp 的回复:
引用 4 楼 coyer 的回复:
过滤掉不在自己窗口内的点击。
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);


这段代码写在哪里?如果是写在父对话框的函数里,好像父对话框接收不到子控件的鼠标单击消息吧

就写在void CSubEdit::OnLButtonDown(UINT nFlags, CPoint point)
[/Quote]

恩我明白了,但是这样做还有一个小问题,就是关闭了AfxMessageBox(...); 之后,鼠标的光标形状移到CSubEdit之外,仍然是"I"的形状,必须得再点击一次才会变回箭头形状
starytx 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cymvp 的回复:]
引用 4 楼 coyer 的回复:
过滤掉不在自己窗口内的点击。
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);


这段代码写在哪里?如果是写在父对话框的函数里,好像父对话框接收不到子控件的鼠标单击消息吧
[/Quote]
就写在void CSubEdit::OnLButtonDown(UINT nFlags, CPoint point)
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 coyer 的回复:]
过滤掉不在自己窗口内的点击。
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);
[/Quote]

这段代码写在哪里?如果是写在父对话框的函数里,好像父对话框接收不到子控件的鼠标单击消息吧
coyer 2009-01-06
  • 打赏
  • 举报
回复
过滤掉不在自己窗口内的点击。
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);
  • 打赏
  • 举报
回复

[Quote=引用 1 楼 wendysen 的回复:]
"然后用vc向导为该类重载了单击消息处理函数OnLButtonDown"为哪个类重载呢?父类还是子类?看上去像父类重载。
[/Quote]

是重载了子类的OnLButtonDown。

这是源码:
BEGIN_MESSAGE_MAP(CSubEdit, CEdit)
//{{AFX_MSG_MAP(CSubEdit)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
OenAuth.Net 2009-01-06
  • 打赏
  • 举报
回复
把你的BEGIN_MESSAGE_MAP(...)发过来看看
wendysen 2009-01-06
  • 打赏
  • 举报
回复
"然后用vc向导为该类重载了单击消息处理函数OnLButtonDown"为哪个类重载呢?父类还是子类?看上去像父类重载。
hityct1 2009-01-06
  • 打赏
  • 举报
回复
这是因为焦点在Edit上的缘故,你可以试一下,如果焦点不在Edit上,不不会弹出对话框了。
tiger波波 2009-01-06
  • 打赏
  • 举报
回复
void CMyEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("aaa");
CEdit::OnLButtonDown(nFlags, point);
}
把CEdit::OnLButtonDown(nFlags, point);注释掉就可以了
Allen_zhang 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cymvp 的回复:]
引用 9 楼 cymvp 的回复:
引用 4 楼 coyer 的回复:
过滤掉不在自己窗口内的点击。
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);



我刚才试了,这种方法也不行,请问这个问题的原理是什么?


不好意思,这个方法可以,但是请问这个问题的原理是什么?
[/Quote]

判断这个鼠标消息是不是他自己的,不是的话就不处理而已
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cymvp 的回复:]
引用 4 楼 coyer 的回复:
过滤掉不在自己窗口内的点击。
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);



我刚才试了,这种方法也不行,请问这个问题的原理是什么?
[/Quote]

不好意思,这个方法可以,但是请问这个问题的原理是什么?
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 coyer 的回复:]
过滤掉不在自己窗口内的点击。
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);
[/Quote]


我刚才试了,这种方法也不行,请问这个问题的原理是什么?
Allen_zhang 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cymvp 的回复:]
引用 6 楼 starytx 的回复:
引用 5 楼 cymvp 的回复:
引用 4 楼 coyer 的回复:
过滤掉不在自己窗口内的点击。
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
AfxMessageBox(...);


这段代码写在哪里?如果是写在父对话框的函数里,好像父对话框接收不到子控件的鼠标单击消息吧

就写在void CSubEdit::OnLButtonDown(UINT nFlags, CPoint point)


恩我明白了,但是这样做还有一个小问题,就…
[/Quote]


messagebox之后SetFocus一下

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧