在主窗口中启动一个线程,线程中显示一个对话框(非模式的),怎么设定对话框的父窗口为主窗口。

解决方案 »

  1.   

    把主窗口的HWND作为参数传递到你的线程中
    创建的时候指定不就可以了吗?
      

  2.   

    在主窗口中创建线程,AfxBeginThread(ThreadFunction,this);
    UINT ThreadFunction(PVOID *pVoid)
    {
      CMyDlg *pDlg = (CMyDlg*)pVoid;
      pDlg->ShowModlessDlg();
    }CMyDlg::ShowModlessDlg()
    {
    //创建一个非模式对话框。这个应该会了吧?
    }
      

  3.   

    unsigned CFileDlgMT::ThreadMain(void)
    {
    CDlg *pDial = NULL;
    try
    {
    pDial = new CDlg( m_strCaption , m_pParent );
    pDial->Create(IDD_DLG);
    if ( m_pParent )
    {
    pDial->CenterWindow(m_pParent);
    pDial->ShowWindow(SW_SHOW);
    }
    m_pDlg = pDial;
    SetEvent( ( HANDLE )m_cSmartHandle );
    for( ; ; )
    {
    if( m_bTerminate )
    {
    break;
    }
    DoEvents();
    Sleep( 50 );
    }
    }
    catch( ... )
    {
    }
    if( pDial )
    {
    pDial->DestroyWindow();
    }
    return 0;
    }
      

  4.   

    代码说明:
    在线程里创建非模式对话框。创建之后一直等待直到m_bTerminate 为真后对话框关闭。pDial->Create(IDD_DLG);
    变更成
    pDial->Create(IDD_DLG,m_pParent );后发生异常。
      

  5.   

    m_pParent是怎么来的?
    另外,你的代码中缺少消息循环。
      

  6.   

    m_pParent是 否空指针?
    它怎么得出来的?
    LZ调试一下。
      

  7.   

    这只是部分代码,m_pParent是mainframe的指针。
    我只是显示窗口,再关闭,不用消息循环。程序是没问题的,只是父窗口设置不上。其他都正确。
      

  8.   


    对话框模板设置了 WS_CHILD了吗?
      

  9.   

    m_pParent有问题,你调试看看值对不对。
    如果没有消息循环,ShowWindow之后应该调用UpdateWindow。
      

  10.   

    如果没有消息循环,ShowWindow之后应该调用UpdateWindow
    看看m_pParent最终值
      

  11.   

    DoEvents()里有消息处理,会处理刷新。从理论上讲两个线程的窗口能设成父子关系的窗口吗?
    有谁做过,回答是还是不是就行。
      

  12.   

    m_pEdit->SetParent(&m_List);
    刚写的程序,函数参数应该为指针.
      

  13.   

    pDial->Create(IDD_DLG);是基类的吗?是基类的Create的话缺省的是pParent = NULL;