创建自己的UI线程类,管理dlg对话框
#include "dlg.h"
// CUIThread
class CUIThread : public CWinThread
{
DECLARE_DYNCREATE(CUIThread)
protected:
CUIThread(); // protected constructor used by dynamic creation
virtual ~CUIThread();
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
CDlg dlg;
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnAsk(UINT wParam,LONG lParam);
public:
virtual int Run();
};
。pp文件
BOOL CUIThread::InitInstance()
{
// TODO: perform and per-thread initialization here
this->m_pMainWnd=&dlg;
dlg.DoModal();
//dlg->Create( IDD_DIALOG2, NULL );
//dlg->ShowWindow(SW_SHOW);
return TRUE;
}
BEGIN_MESSAGE_MAP(CUIThread, CWinThread)
ON_THREAD_MESSAGE(WM_ASK,OnAsk)
END_MESSAGE_MAP()
//在创建的时候需要做的修改
void CddDlg::OnUI()
{
p=
(CUIThread *)
AfxBeginThread(RUNTIME_CLASS(CUIThread));
//p->CreateThread(0,0,0);
// p->InitInstance();
}
void CddDlg::OnBnClickedSenduimsg()
{
p->PostThreadMessage(WM_ASK,0,0);
}
注意,此处使用了
CUIThread *pthread=(CUIThread *)AfxBeginThread(RUNTIME_CLASS(CUIThread));
对该线程发送消息则使用了pthread->PostThreadMessage(WM_ASK,0,0);
在该UI线程中,使用ON_THREAD_MESSAGE(WM_MY_MSG,OnMyProcess) 进行消息映射
dd.rar
例子下载