为什么对话框不能响应WM_KILLFOCUS消息

jayili 2005-12-09 12:08:08
想在窗口失去焦点时 捕获这个消息 然后自动切换回来
但是添加OnKillFocus后 却始终捕捉不到该消息
怎么回事呢?
...全文
387 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoogle 2005-12-10
  • 打赏
  • 举报
回复
http://www.microsoft.com/china/msdn/archives/library/dnwxp/html/xpvisualstyles.asp#xpvisualstyles_topic3
yoogle 2005-12-10
  • 打赏
  • 举报
回复
好像要利用到hook技术吧,反正我猜应该是种监听进程。
yoogle 2005-12-10
  • 打赏
  • 举报
回复
这个问题看起来不简单,我也没做过类似的,只能谈谈我的理解吧

当你的对话框不是模态对话框的时候,你用鼠标点击windows的其他地方,你的程序此时就已经失去了对鼠标的控制了,除非你的进程有监听鼠标点击位置的功能。程序本身的lbuttondown肯定是不行的。

解决办法:1,我想你可以在鼠标离开窗口的时候截获它
WM_MOUSELEAVE消息:这个消息可以使你知道鼠标何时离开窗口。与此相关的API函数是::TrackMouseEvent(),通过它,一个程序可以注册,当光标离开窗口时接收WM_MOUSELEAVE消息,而光标在窗口中停滞时接收WM_MOUSEHOVER消息。::TrackMouseEvent()函数只有一个参数,是一个指向TRACKMOUSEEVENT结构的指针。
2,直接设置dlg为模态窗口
3,如果你想切换到别的程序或者桌面的时候再自动切换回来,你就得再查查资料了。我也不董。了

yoogle 2005-12-09
  • 打赏
  • 举报
回复
怎么会呢?
jayili 2005-12-09
  • 打赏
  • 举报
回复
发现killfocus在onclose之后,那要做到我要求的功能怎么做呢?
附:
MFC应用程序中关闭模式对话框的顺序

1.OnClose() 消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候,该函数被调用

2.OnKillFocus() 消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送

3.OnDestroy() 消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送

4.OnNcDestroy() 消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送

5.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用
jayili 2005-12-09
  • 打赏
  • 举报
回复
是单个对话框,Onkillfocus是在***dlg里添加的,我切换到别的程序或者桌面的时候,不执行Onkillfocus

16,551

社区成员

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

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

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