但是添加OnKillFocus后 却始终捕捉不到该消息
怎么回事呢?
6 个解决方案
#1
怎么会呢?
#2
是单个对话框,Onkillfocus是在***dlg里添加的,我切换到别的程序或者桌面的时候,不执行Onkillfocus
#3
发现killfocus在onclose之后,那要做到我要求的功能怎么做呢?
附:
MFC应用程序中关闭模式对话框的顺序
1.OnClose() 消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候,该函数被调用
2.OnKillFocus() 消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送
3.OnDestroy() 消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送
4.OnNcDestroy() 消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送
5.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用
附:
MFC应用程序中关闭模式对话框的顺序
1.OnClose() 消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候,该函数被调用
2.OnKillFocus() 消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送
3.OnDestroy() 消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送
4.OnNcDestroy() 消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送
5.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用
#4
这个问题看起来不简单,我也没做过类似的,只能谈谈我的理解吧
当你的对话框不是模态对话框的时候,你用鼠标点击windows的其他地方,你的程序此时就已经失去了对鼠标的控制了,除非你的进程有监听鼠标点击位置的功能。程序本身的lbuttondown肯定是不行的。
解决办法:1,我想你可以在鼠标离开窗口的时候截获它
WM_MOUSELEAVE消息:这个消息可以使你知道鼠标何时离开窗口。与此相关的API函数是::TrackMouseEvent(),通过它,一个程序可以注册,当光标离开窗口时接收WM_MOUSELEAVE消息,而光标在窗口中停滞时接收WM_MOUSEHOVER消息。::TrackMouseEvent()函数只有一个参数,是一个指向TRACKMOUSEEVENT结构的指针。
2,直接设置dlg为模态窗口
3,如果你想切换到别的程序或者桌面的时候再自动切换回来,你就得再查查资料了。我也不董。了
当你的对话框不是模态对话框的时候,你用鼠标点击windows的其他地方,你的程序此时就已经失去了对鼠标的控制了,除非你的进程有监听鼠标点击位置的功能。程序本身的lbuttondown肯定是不行的。
解决办法:1,我想你可以在鼠标离开窗口的时候截获它
WM_MOUSELEAVE消息:这个消息可以使你知道鼠标何时离开窗口。与此相关的API函数是::TrackMouseEvent(),通过它,一个程序可以注册,当光标离开窗口时接收WM_MOUSELEAVE消息,而光标在窗口中停滞时接收WM_MOUSEHOVER消息。::TrackMouseEvent()函数只有一个参数,是一个指向TRACKMOUSEEVENT结构的指针。
2,直接设置dlg为模态窗口
3,如果你想切换到别的程序或者桌面的时候再自动切换回来,你就得再查查资料了。我也不董。了
#5
好像要利用到hook技术吧,反正我猜应该是种监听进程。
#6
http://www.microsoft.com/china/msdn/archives/library/dnwxp/html/xpvisualstyles.asp#xpvisualstyles_topic3
#1
怎么会呢?
#2
是单个对话框,Onkillfocus是在***dlg里添加的,我切换到别的程序或者桌面的时候,不执行Onkillfocus
#3
发现killfocus在onclose之后,那要做到我要求的功能怎么做呢?
附:
MFC应用程序中关闭模式对话框的顺序
1.OnClose() 消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候,该函数被调用
2.OnKillFocus() 消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送
3.OnDestroy() 消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送
4.OnNcDestroy() 消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送
5.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用
附:
MFC应用程序中关闭模式对话框的顺序
1.OnClose() 消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候,该函数被调用
2.OnKillFocus() 消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送
3.OnDestroy() 消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送
4.OnNcDestroy() 消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送
5.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用
#4
这个问题看起来不简单,我也没做过类似的,只能谈谈我的理解吧
当你的对话框不是模态对话框的时候,你用鼠标点击windows的其他地方,你的程序此时就已经失去了对鼠标的控制了,除非你的进程有监听鼠标点击位置的功能。程序本身的lbuttondown肯定是不行的。
解决办法:1,我想你可以在鼠标离开窗口的时候截获它
WM_MOUSELEAVE消息:这个消息可以使你知道鼠标何时离开窗口。与此相关的API函数是::TrackMouseEvent(),通过它,一个程序可以注册,当光标离开窗口时接收WM_MOUSELEAVE消息,而光标在窗口中停滞时接收WM_MOUSEHOVER消息。::TrackMouseEvent()函数只有一个参数,是一个指向TRACKMOUSEEVENT结构的指针。
2,直接设置dlg为模态窗口
3,如果你想切换到别的程序或者桌面的时候再自动切换回来,你就得再查查资料了。我也不董。了
当你的对话框不是模态对话框的时候,你用鼠标点击windows的其他地方,你的程序此时就已经失去了对鼠标的控制了,除非你的进程有监听鼠标点击位置的功能。程序本身的lbuttondown肯定是不行的。
解决办法:1,我想你可以在鼠标离开窗口的时候截获它
WM_MOUSELEAVE消息:这个消息可以使你知道鼠标何时离开窗口。与此相关的API函数是::TrackMouseEvent(),通过它,一个程序可以注册,当光标离开窗口时接收WM_MOUSELEAVE消息,而光标在窗口中停滞时接收WM_MOUSEHOVER消息。::TrackMouseEvent()函数只有一个参数,是一个指向TRACKMOUSEEVENT结构的指针。
2,直接设置dlg为模态窗口
3,如果你想切换到别的程序或者桌面的时候再自动切换回来,你就得再查查资料了。我也不董。了
#5
好像要利用到hook技术吧,反正我猜应该是种监听进程。
#6
http://www.microsoft.com/china/msdn/archives/library/dnwxp/html/xpvisualstyles.asp#xpvisualstyles_topic3