写了一些代码测试在头文件里添加
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()消失后,对话框我消失了,不知道为什么
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()消失后,对话框我消失了,不知道为什么
再在ExitInstance 中销毁这个对话框
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 中……
{
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;
}我用过的一段代码,凑合着看吧 ……