急。。。弹出模态对话框,点击任务栏卡死。。。。。

tyutluoyin 2012-08-02 08:56:21
vc6.0中,新建mfc工程,对话框里面加一个编辑框控件,编辑框失去焦点函数如下:
void CTestDlg::OnKillfocusEditTest()
{
AfxMessageBox("aaa");
}
运行后,在编辑框还处于编辑状态时(未弹出对话框),点击操作系统任务栏右边输入法附近位置,整个屏幕卡死,不是每次都出现,但是几率比较大。如果我将操作系统的语言栏隐藏就不会卡死,感觉跟输入法有关。
...全文
382 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyutluoyin 2012-08-10
  • 打赏
  • 举报
回复
这个确实应该是操作系统的问题,根本原因还是没有找到,我的解决方法是:点击的非本应用程序时,则不弹出提示对话框,只有当我的应用程序得到焦点时才弹出,就像Excel一样,目前只能这样处理了。。。
tyutluoyin 2012-08-06
  • 打赏
  • 举报
回复
我主要是实现用户输入不合法时,弹出对话框提示,并不是调试,此问题已经困扰我多时,可能涉及语言栏及任务栏的消息响应,坐等高手!!!
schlafenhamster 2012-08-06
  • 打赏
  • 举报
回复
你试试,具体不了解。
tyutluoyin 2012-08-06
  • 打赏
  • 举报
回复
这个思想应该可以,我之前也是这么想的,因为我看EXCEL就是这样处理的,当点击的是非本程序时,不处理焦点失去消息,但是我没找到如何判断用户点击的不是本应用程序,居然忘记GetActiveWindow()这个函数了。
还有个问题是:我在本程序视图的OnActivateView函数中调用了编辑框的KillFocus函数,但此时GetActiveWindow()函数取得的还是本应用程序窗口,点击其它程序时弹出对话框就会有问题了,我得想想能不能将这个函数中的KillFocus去掉。
schlafenhamster 2012-08-06
  • 打赏
  • 举报
回复
一定要这样可以判断当前窗口是不是对话框。
即:
if(GetActiveWindow()==this) AfxMessageBox("aaa");
其他情况是不必处理的,因为是用户暂时离开你的对话框,再进入时,焦点不会变的。
tyutluoyin 2012-08-06
  • 打赏
  • 举报
回复
我这个判断是比较复杂的,判断时还要发送消息,而且数据比较多,在EN_CHANGE处理不太现实,还是在结束编辑的时候处理比较好。这个问题应该就是XP的BUG,鼠标经过语言栏时,不知道操作系统做了什么,具体原因可能不好找,但是我现在用什么办法可以先将问题解决掉。。。总不能将语言栏Destroy吧
tyutluoyin 2012-08-06
  • 打赏
  • 举报
回复
我这个判断是比较复杂的,判断时还要发送消息,而且数据比较多,在EN_CHANGE处理不太现实,还是在结束编辑的时候处理比较好。这个问题应该就是XP的BUG,鼠标经过语言栏时,不知道操作系统做了什么,具体原因可能不好找,但是我现在用什么办法可以先将问题解决掉。。。总不能将语言栏Destroy吧
schlafenhamster 2012-08-06
  • 打赏
  • 举报
回复
"用户输入不合法"应该在EN_CHANGE里处理。
schlafenhamster 2012-08-05
  • 打赏
  • 举报
回复
或者:
if(GetActiveWindow()==this) AfxMessageBox("aaa");
else afxDump << "aaa\n";
schlafenhamster 2012-08-05
  • 打赏
  • 举报
回复
如果为调试应该使用:
afxDump << "aaa\n";
schlafenhamster 2012-08-05
  • 打赏
  • 举报
回复
因为AfxMessageBox("aaa");// 模态
已经弹出来了(关闭前面的窗口就可以看到)等待响应
tyutluoyin 2012-08-05
  • 打赏
  • 举报
回复
现在找到必现的步骤,如果在点击任务栏之前,鼠标经过了语言栏,那么点击任务栏的任何地方,都会卡死,如果鼠标不经过语言栏,那么就不会卡死了。不知道鼠标经过语言栏的时候做了什么???难道没人遇到过这个问题吗?
schlafenhamster 2012-08-04
  • 打赏
  • 举报
回复
AfxMessageBox("aaa");// 模态
如果是键盘关闭(return)
就会有这种情况。
tyutluoyin 2012-08-04
  • 打赏
  • 举报
回复
win7下没有这个问题,Xp下才有;
是在弹出对话框的时候卡死的,卡死以后等几秒时间,模态对话框才弹出来,如果在弹出之后处理应该没作用吧???
schlafenhamster 2012-08-03
  • 打赏
  • 举报
回复
AfxMessageBox("aaa");// 模态
//试试:
SendMessage(WM_CANCELMODE,0,0);
长尾巴的悟空 2012-08-03
  • 打赏
  • 举报
回复
用的是win7?
用xp就不会。
schlafenhamster 2012-08-03
  • 打赏
  • 举报
回复
再试试:
// must after MessageBox()
PostMessage(hWnd, WM_CANCELMODE, 0, 0);
tyutluoyin 2012-08-03
  • 打赏
  • 举报
回复
请教楼上方法是什么意思?试了好像不行。
tongzhipeng5699 2012-08-02
  • 打赏
  • 举报
回复
跟输入确实有关,我刚才直接哪我现在回帖的这个编辑回复框测试,发现一个问题,点击输入法是光标是保留在原来的位置的,但是单击别的地方这个编辑框就立刻失去焦点了。点击输入法的时候难道焦点一直在这个编辑框吗?我猜测可能是短暂的瞬间失去了焦点,然后又立刻回来了,失去焦点要弹出对话框,弹出之后焦点又会失去,然后又弹出来,循环往复。
其他情况不除问题是因为失去焦点后不会再将焦点回过去。
仅仅是猜测,请不要被雷到....

16,472

社区成员

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

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

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