我的程序是这样的结构:
   我做的模块是以DLL的形式存在的,我的模块的主窗体是作为一个TAB页面嵌入程序的主窗体中去的
在我的窗体中有一个ToolBar控件,ToolBar上有一个“打开”按钮,我通过onCommand()消息的ID匹配来进行消息响应的。
调用了系统的打开对话框(模态的)。
   同时,在我的主窗体中又有通过CPropertySheet的对象,加入了2个子TAB页面。
   问题就出现在子页面上,因为我子页面上放置了一个CComboBox控件,只要对 CComboBox控件进行操作以后,
如果我在操作我的模块的主窗体的“打开”按钮,这个时候调用打开对话框,界面立马就出现僵死的情况。
   
   我已经测试了很多次,发现,不光是CComboBox控件,我们对控件进行一些操作,然后操作“打开“按钮就会界面僵死   初步怀疑是界面线程进入了死循环。

解决方案 »

  1.   

    你调试看看,出错时能否执行到OnCommand函数。
      

  2.   

    执行到了,
    在CFileDialog的DoModal()函数的实现里死循环了
      

  3.   

    CFileDialog是怎么构造的?可以再跟踪到DoModal里面看看死在哪里。
      

  4.   

    if (m_bOpenFileDialog)
    nResult = ::AfxCtxGetOpenFileName(&m_ofn);
    此处出现界面僵死了,请问下,谁遇到过这样的情况啊?怎么解决呢?
      

  5.   

    跟踪进去就是系统API了,进不去了。。
      

  6.   

    DoModal 会阻塞主窗口消息啊!
      

  7.   

    你直接写:
    CFileDialog dlg(TRUE);
    dlg.DoModal();
    会有问题吗?
      

  8.   


    刚试过了,还是界面僵死注意不是出错,是调用函数进入死循环跟进去是下面的函数出问题
    nResult = ::AfxCtxGetOpenFileName(&m_ofn); 
    请问下,谁遇到过这样的情况啊?怎么解决呢?
      

  9.   

    没遇到过这个问题,你把代码(DLL和EXE)发给我,我来调试看看。我的邮箱:[email protected]
      

  10.   

    不现实 ,因为我的程序太大, 几十兆。
    另:我的程序要编译,需要有特定的SDK支持,那个有几百兆,所以愁啊。。
      

  11.   


    切换页面没有问题,操作页面里面的按钮也没问题,就是操作CScrollBar,CComboBox等类似的有消息处理的控件有问题不切换页面,联系打开多次文件对话框也是正常的。。
      

  12.   

    你再试一下,在CFileDialog之前先显示一个MessageBox,然后再构造CFileDialog,看看MessageBox是否能正常显示,再看这样之后FileDialog是否能正常显示。
      

  13.   

    结果是一样的,MessageBox也是无法弹出
      

  14.   

    这问题现在看起来应该与模式对话框或者对话框的父窗口有关,建议你从这两方面再多做一些测试。分别用::MessageBox(NULL, "Test", NULL, 0);和MessageBox("Test");看看能否显示。
    把CFileDialog构造函数中的pParentWnd改成this试试。
    再试试调试跟踪到AfxCtxGetOpenFileName时,将m_ofn.hwndOwner改为0,看能否正常。另外,如果是MFC规则DLL,可以试试在函数入口加上AFX_MANAGE_STATE(AfxGetStaticModuleState( ));,不过感觉应该与此无关。
      

  15.   

    你的CFileDialog没有弹出吗?
    可能已经执行成功了,只是被你的TAB窗口挡在后台无法显示。
    建议你用CAboutDlg试一试。
    记得重载你的CAboutDlg::OnInitDialog()
    加入ShowWindow(SW_SHOW);如果你的CAboutDlg能显示,那你就要考虑你是不是在页面内执行了极其耗时的循环操作(如定时动态界面更新)
      

  16.   


    是界面线程,应该没关系的
    我在相应界面的OnCommand()消息里弹出的打开对话框,应该不是这个问题
    -------------------------------------------------应该不是这个问题,因为我现在情况是鼠标操作以后就是沙漏状,对其他按钮也不能操作了。。
      

  17.   

    我猜你是线程带来的问题,并且你机器应该是双核的
    以前我遇一到过一个问题,在一个双核机上的gui线程中创建窗口后,做任何窗口api调用都会导致卡死,最后只好干掉这个线程,
    还有com的初始化啊之流的试试,当然最后一种可能是你的代码本身就是问题的,一般会是非法
    指针操作,内存越界等等,其他就想不到了,
      

  18.   


    我调试了好久了,还是不能发现问题,昨天就从新根据那个模式,自己写了一个类似的小程序
    同样会出现那样的问题,我把DEMO程序发到你邮箱,请帮忙看看哪里出问题了,谢谢啦
      

  19.   

    看起来是CPropertySheet不能作为子控件。你在创建的时候把WM_CHILD风格去掉,然后再ModifyStyle去掉WS_CAPTION风格(去掉标题和边框),再MoveWindow调整位置,响应消息的时候用AfxGetMainWnd获得主窗口指针,这样应该就可以了。顺便提一下,一般这种情况都是用CTabCtrl的,用CPropertySheet还是第1次遇到。
      

  20.   

    以前记得在dll中调用模式对话框好像有什么设置的