以下是我要做的事情:我的伙伴的NPAPI插件在我的vc dll中调用一个函数,我的函数显示一个模态对话框并接受用户输入。但是在对话框显示之后,firefox的plugin-hang-ui会在几秒后弹出,我必须手动关闭它,否则NPAPI插件会在几秒后崩溃。
HANDLE hThread - AfxBeginThread(DialogProc);//dialog diaplays in this thread
MsgWaitForMultipleObjects(1,&hThread,FALSE,INFINITE,QS_ALLINPUT);
此外,如果我将firefox设置为对话框的父窗口(使用getForgroundWindow()
来获取firefox的句柄),我的对话框将导致UI挂起。
我已经尝试了谷歌,但我确实发现了一些类似的问题(like here),但这些问题的答案并没有解决我的问题。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
经过几天的搜索和测试,我终于找到了解决这个问题的两种方法。
DialogBox
或DialogBoxParam
弹出模态对话框,而不是MFC DoModal。 2.使用MFC DoModal但在OnInitDialog
中添加一个小技巧,弹出一个消息框并立即自动关闭它。然后对话框不会让插件挂起。
1)2)弹出主线程中的对话框。我真的不明白为什么?它应该是与Windows消息处理机制相关的东西。任何有任何想法的人,我们都可以讨论它。 :-)
答案 1 :(得分:0)
您的问题是您正在阻止主线程。您可能正在另一个线程上打开对话框,但是当您MsgWaitForMultipleObjects
阻塞直到另一个线程完成时。您的函数必须返回,并且不能等待对话框。