dlg添加了CMyButton类

lixung 2010-04-15 07:04:43

//我建立了一个mfc dlg,然后添加了一个CMyButton类
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
//::MessageBox(NULL,NULL,"3245ytrew",0);//如果放这里,dlg就获取不了焦点,导致无论点什么键都 一直响应此消息,dlg也关闭了不了??!!
CButton::OnLButtonDown(nFlags, point);

::MessageBox(NULL,NULL,"3245ytrew",0);//放这里就正常,为什么呢?

}
...全文
182 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixung 2010-04-19
  • 打赏
  • 举报
回复
为什么会呢,谁能详细的讲讲?
lixung 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 ilysony 的回复:]

。。。楼主口头CHAN。 这是为什么呢?
[/Quote]

我想换别的来表达我深深的疑问,但是这个更直白些:)
lixung 2010-04-19
  • 打赏
  • 举报
回复
结贴,我搞清楚了 谢谢qq好友 新技术
Sou2012 2010-04-19
  • 打赏
  • 举报
回复
。。。楼主口头CHAN。 这是为什么呢?
lixung 2010-04-16
  • 打赏
  • 举报
回复
期待兔子党,王老五和各位星星普度众生
lixung 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sullensun 的回复:]

不是消息问题,主要是焦点。。
你执行了messagebox再执行
CButton::OnLButtonDown(nFlags, point);
焦点一直在按钮上,你可以注释掉CButton::OnLButtonDown(nFlags, point);
[/Quote]

注释掉button就不会有凹陷了...

我的问题是:红色部分,我要的不是解决方法,是为什么
{
//::MessageBox(NULL,NULL,"3245ytrew",0);//如果放这里,dlg就获取不了焦点,导致无论点什么键都 一直响应此消息,dlg也关闭了不了??!!
CButton::OnLButtonDown(nFlags, point);

::MessageBox(NULL,NULL,"3245ytrew",0);//放这里就正常,为什么呢?
}
这不是鸭头 2010-04-16
  • 打赏
  • 举报
回复
学习....
木薯超人 2010-04-16
  • 打赏
  • 举报
回复
简单测试了下,点一次后把所有的窗口最小化发现再点居然对整个WINDOWS点左键都有效。好有意思回来继续测试
木薯超人 2010-04-16
  • 打赏
  • 举报
回复
可能是因为焦点一直落在该button上了,所以一直响应你的LBUTTONDOWN消息
你可以试试上下方向键更换下焦点就没这个情况了。
SullenSun 2010-04-15
  • 打赏
  • 举报
回复
不是消息问题,主要是焦点。。
你执行了messagebox再执行
CButton::OnLButtonDown(nFlags, point);
焦点一直在按钮上,你可以注释掉CButton::OnLButtonDown(nFlags, point);

liyelun 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 visualeleven 的回复:]
MessageBox()相当于模态对话框,会阻塞当前的消息loop,直到该对话框被关闭,才会返回原来的消息loop
[/Quote]
如果不调试运行的话,即使该对话框被关闭了,再次点击鼠标的时候,即使点击的是其他控件,也会再次弹出该对话框,很想SetCapture的那种效果...
Eleven 2010-04-15
  • 打赏
  • 举报
回复
MessageBox()相当于模态对话框,会阻塞当前的消息loop,直到该对话框被关闭,才会返回原来的消息loop
liyelun 2010-04-15
  • 打赏
  • 举报
回复
不知道原因,帮顶下
liyelun 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 warsour 的回复:]
MessageBox相当于一个模态对话框,会阻塞消息的
放在
CButton::OnLButtonDown(nFlags, point);
之前,则这句就不会执行,
放在之后的话,
就已经先处理了默认点击事件,再弹出就不会有影响
[/Quote]
你说的不对的。
我试了下楼主的情况,
我把MessageBox放在了CButton::OnLButtonDwn之前,代码如下
void CMyBtn::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox(_T("ok"));
//可以在这里加断点调试
CButton::OnLButtonDown(nFlags, point);
}

Ctrl+F5运行的时候,会出现楼主所说的情况,但是我在2句代码间加断点调试的时候,是没有问题的,CButton::OnLButtonDown(nFlags, point);会被执行的到
warsour 2010-04-15
  • 打赏
  • 举报
回复
MessageBox相当于一个模态对话框,会阻塞消息的
放在
CButton::OnLButtonDown(nFlags, point);
之前,则这句就不会执行,
放在之后的话,
就已经先处理了默认点击事件,再弹出就不会有影响
lixung 2010-04-15
  • 打赏
  • 举报
回复
为什么会影响到呢,谁能详细的讲讲?
lixung 2010-04-15
  • 打赏
  • 举报
回复
MessageBox是怎么样影响原来的消息循环的呢
bcrun 2010-04-15
  • 打赏
  • 举报
回复
这类代码显示没有影响到原来的消息循环:

double d = -4.8366978272230e-026;
CString str;
str.Format("%e",d);
lixung 2010-04-15
  • 打赏
  • 举报
回复
为什么呢
瓶盒 2010-04-15
  • 打赏
  • 举报
回复
当执行::MessageBox(NULL,NULL,"3245ytrew",0);这句时,程序会被挂起,正常情况是转到消息循环中,我推测如果把CButton::OnLButtonDown(nFlags, point);放到后面时,当前消息就不能正常处理完成,所以消息循环就会停在哪。如果是楼主3楼的代码则因程序不会被挂起,所以不会有问题。
具体跟进去看下代码应该就清楚了。
加载更多回复(3)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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