SetCapture与鼠标左键单击的问题

sdn_009 2008-07-31 11:57:40
有这样一个问题:
我有一个主对话框,按下主对话框上的一个按钮后弹出子对话框。现在我鼠标左键单击主对话框的客户区以及非客户区,能够去掉子对话框,这应该是很容易的,在主对话框中接受WM_LBUTTONDOWN和WM_NCLBUTTONDOWN消息后将指向子对话框的指针delete掉就ok了。
但现在的情况是,我希望能够鼠标左键单击主对话框以外的区域也能够实现将子对话框消去,在对话框以外的单击左键对话框应该是接受不到消息的,除非是用SetCapture()来捕获鼠标,可是具体的操作我一直没法实现;或者说是否有其他可用的方法,向各位请教了。
...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdn_009 2008-08-01
  • 打赏
  • 举报
回复
其实你提到的前一段时间论坛里也有同样的问题你也回答过,其实那个问题也是我提的,只不过那时候没有看懂你的回复。没办法,咱还是新手,还要好好努力啊!
sdn_009 2008-08-01
  • 打赏
  • 举报
回复
恩,搞定了,这种方法很直观,仅仅用一种函数就可以来处理许多种情况。受益匪浅,谢谢啦,马上给分。
sdn_009 2008-08-01
  • 打赏
  • 举报
回复
我试过了,用SetCapture()确实可以完成一部分的功能,但是却有不少缺点,比如它在捕获鼠标后的下一次单击只能是响应LButtonDown来判断是否在子对话框范围,而不能实现其他任何功能。但还是谢谢你能够提供我这样一种思路。马上给分。
cnzdgs 2008-07-31
  • 打赏
  • 举报
回复
你是想在子对话框变为非活动状态的时候将其关闭吧?只要在子对话框中响应WM_ACTIVATE消息,判断状态为WA_INACTIVE时,自己关闭就可以了。
iamknight 2008-07-31
  • 打赏
  • 举报
回复
用SetCapture()将鼠标捕获到主对话框,在主对话框响应鼠标点击事件,检查当前点击事件的鼠标坐标,如果不在子对话框范围内就消隐子对话框
zqh886 2008-07-31
  • 打赏
  • 举报
回复
前段时间我正好也遇到同样的问题

在类向导的在class info中,把Advanced Options的Message filter设为Window,然后再回到Message Maps,就可以看到WM_ACTIVATE消息。双击WM_ACTIVATE,就可以加载OnActivate。

void CNomodal::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);

if(WA_INACTIVE == nState) //增加一行
{
this->ShowWindow(SW_HIDE);//当你单击鼠标是在对话框外,隐藏对话框
}
// TODO: Add your message handler code here

}

15,980

社区成员

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

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