关于 线程中创建非模态对话框 我试了很多方法,但是结果都是令人失望没有成功。但是经过我不懈的尝试终于找到了一个自己的方法,我不知道是否是标准的方法。估计有很多人都遇到过 线程中创建非模态对话框 的难题,所以我把我的方法拿出来供大家共同学习交流之用。
主要以下方法针对基于对话框的程序。
#define UM_CREATE_DLG WM_USER+105 //创建对话框的消息
#define UM_DELETE_DLG WM_USER+106 //销毁对话框的消息
afx_msg void OnCreateDlg(WPARAM,LPARAM);//消息函数声明
afx_msg void OnDeleteDlg(WPARAM,LPARAM);
ON_MESSAGE(UM_CREATE_DLG,OnCreateDlg)//消息映射
ON_MESSAGE(UM_DELETE_DLG,OnDeleteDlg)
void CLANCommunionDlg::OnCreateDlg(WPARAM wParam,LPARAM lParam )
{
CTransportInfoDlg* p=(CTransportInfoDlg*)wParam; //CTransportInfoDlg为非模态对话框类
p->Create(IDD_TRANSPORTINFO_DLG,this); //IDD_TRANSPORTINFO_DLG为非模态对话框资源ID
p->ShowWindow(SW_SHOW);
}
void CLANCommunionDlg::OnDeleteDlg(WPARAM wParam,LPARAM lParam )
{
CTransportInfoDlg* p=(CTransportInfoDlg*)wParam;
p->DestroyWindow( );
p=NULL;
//注意在非模态对话框类中添加 PostNcDestroy()函数,并在其中添加 Delete This;
/*即
void CTransportInfoDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
delete this;
}
*/
}
UNIT WorkThread(LPVOID param)
{
CWnd* pParent=主对话框类;
CTransportInfoDlg* pDialog=new CTransportInfoDlg();
pParent->SendMessage(UM_CREATE_DLG,(WPARAM)pDialog);
//做你要做的事情。
pParent->SendMessage(UM_DELETE_DLG,(WPARAM)pDialog);
}