我的程序是这样的结构:
我做的模块是以DLL的形式存在的,我的模块的主窗体是作为一个TAB页面嵌入程序的主窗体中去的
在我的窗体中有一个ToolBar控件,ToolBar上有一个“打开”按钮,我通过onCommand()消息的ID匹配来进行消息响应的。
调用了系统的打开对话框(模态的)。
同时,在我的主窗体中又有通过CPropertySheet的对象,加入了2个子TAB页面。
问题就出现在子页面上,因为我子页面上放置了一个CComboBox控件,只要对 CComboBox控件进行操作以后,
如果我在操作我的模块的主窗体的“打开”按钮,这个时候调用打开对话框,界面立马就出现僵死的情况。
我已经测试了很多次,发现,不光是CComboBox控件,我们对控件进行一些操作,然后操作“打开“按钮就会界面僵死 初步怀疑是界面线程进入了死循环。
我做的模块是以DLL的形式存在的,我的模块的主窗体是作为一个TAB页面嵌入程序的主窗体中去的
在我的窗体中有一个ToolBar控件,ToolBar上有一个“打开”按钮,我通过onCommand()消息的ID匹配来进行消息响应的。
调用了系统的打开对话框(模态的)。
同时,在我的主窗体中又有通过CPropertySheet的对象,加入了2个子TAB页面。
问题就出现在子页面上,因为我子页面上放置了一个CComboBox控件,只要对 CComboBox控件进行操作以后,
如果我在操作我的模块的主窗体的“打开”按钮,这个时候调用打开对话框,界面立马就出现僵死的情况。
我已经测试了很多次,发现,不光是CComboBox控件,我们对控件进行一些操作,然后操作“打开“按钮就会界面僵死 初步怀疑是界面线程进入了死循环。
在CFileDialog的DoModal()函数的实现里死循环了
nResult = ::AfxCtxGetOpenFileName(&m_ofn);
此处出现界面僵死了,请问下,谁遇到过这样的情况啊?怎么解决呢?
CFileDialog dlg(TRUE);
dlg.DoModal();
会有问题吗?
刚试过了,还是界面僵死注意不是出错,是调用函数进入死循环跟进去是下面的函数出问题
nResult = ::AfxCtxGetOpenFileName(&m_ofn);
请问下,谁遇到过这样的情况啊?怎么解决呢?
另:我的程序要编译,需要有特定的SDK支持,那个有几百兆,所以愁啊。。
切换页面没有问题,操作页面里面的按钮也没问题,就是操作CScrollBar,CComboBox等类似的有消息处理的控件有问题不切换页面,联系打开多次文件对话框也是正常的。。
把CFileDialog构造函数中的pParentWnd改成this试试。
再试试调试跟踪到AfxCtxGetOpenFileName时,将m_ofn.hwndOwner改为0,看能否正常。另外,如果是MFC规则DLL,可以试试在函数入口加上AFX_MANAGE_STATE(AfxGetStaticModuleState( ));,不过感觉应该与此无关。
可能已经执行成功了,只是被你的TAB窗口挡在后台无法显示。
建议你用CAboutDlg试一试。
记得重载你的CAboutDlg::OnInitDialog()
加入ShowWindow(SW_SHOW);如果你的CAboutDlg能显示,那你就要考虑你是不是在页面内执行了极其耗时的循环操作(如定时动态界面更新)
是界面线程,应该没关系的
我在相应界面的OnCommand()消息里弹出的打开对话框,应该不是这个问题
-------------------------------------------------应该不是这个问题,因为我现在情况是鼠标操作以后就是沙漏状,对其他按钮也不能操作了。。
以前我遇一到过一个问题,在一个双核机上的gui线程中创建窗口后,做任何窗口api调用都会导致卡死,最后只好干掉这个线程,
还有com的初始化啊之流的试试,当然最后一种可能是你的代码本身就是问题的,一般会是非法
指针操作,内存越界等等,其他就想不到了,
我调试了好久了,还是不能发现问题,昨天就从新根据那个模式,自己写了一个类似的小程序
同样会出现那样的问题,我把DEMO程序发到你邮箱,请帮忙看看哪里出问题了,谢谢啦