写了一些代码测试在头文件里添加
class CTestThreadTest : public CWinThread
{
public:
CTestThreadTest(){};
public:
virtual BOOL InitInstance(); DECLARE_DYNCREATE(CTestThreadTest)
DECLARE_MESSAGE_MAP()
};cpp文件里添加
BEGIN_MESSAGE_MAP(CTestThreadTest, CWinThread)
END_MESSAGE_MAP()
IMPLEMENT_DYNCREATE(CTestThreadTest, CWinThread)//线程初始化函数,显示一个对话框窗口
BOOL CTestThreadTest::InitInstance()
{
CTestThreadDlg dlg;
dlg.Create(MAKEINTRESOURCE(IDD_TESTTHREAD_DIALOG));
dlg.ShowWindow(SW_SHOW);
return TRUE;
}创建线程调用
AfxBeginThread(RUNTIME_CLASS(CTestThreadTest));
但是我创建的对话框显示不出来,在CTestThreadTest::InitInstance返回前,加入MessageBox(),发现对话框窗口出来了,点确定,MessageBox()消失后,对话框我消失了,不知道为什么

解决方案 »

  1.   

    把你的对话框变成类变量试试,这样应该可以
    再在ExitInstance 中销毁这个对话框
      

  2.   

    //线程初始化函数,显示一个对话框窗口
    BOOL CTestThreadTest::InitInstance()
    {
    CTestThreadDlg dlg; 
    dlg.Create(MAKEINTRESOURCE(IDD_TESTTHREAD_DIALOG));
    dlg.ShowWindow(SW_SHOW);
    return TRUE;
    }这个函数有问题……CTestThreadDlg dlg; 这一行中的dlg会在函数返回时销毁……应该改为:CTestThreadDlg* m_pDlg = (CTestThreadDlg*new CTestThreadDlg其中,m_pDlg 是 CTestThreadTest 类中的成员变量,类型是 CTestThreadTest* 最后,不要忘记将 TestThreadDlg.h 添加到 TestThreadTest.h 中……
      

  3.   

    #include "TkDlg.h"// CTkThreadclass CTkThread : public CWinThread
    {
    DECLARE_DYNCREATE(CTkThread)protected:
    CTkThread();           // 动态创建所使用的受保护的构造函数
    virtual ~CTkThread();public:
    virtual BOOL InitInstance();
    virtual int ExitInstance();protected:
    DECLARE_MESSAGE_MAP()public:
    CTkDlg* m_pCurTkDlg;
    };BOOL CTkThread::InitInstance()
    {
    // TODO: 在此执行任意逐线程初始化
    m_pCurTkDlg = new CTkDlg;
    m_pCurTkDlg->Create( IDD_TKDLG );
    m_pCurTkDlg->SetWindowText( (LPCTSTR)g_STR.GetBuffer() );
    g_STR.Empty();
    m_pCurTkDlg->ShowWindow( SW_SHOW );
    m_pCurTkDlg->UpdateData();
    m_pMainWnd = m_pCurTkDlg;
    return TRUE;
    }我用过的一段代码,凑合着看吧 ……