VC++6.0线程中创建非模态对话框体会

来源:互联网 发布:mac excel 日期快捷键 编辑:程序博客网 时间:2024/06/06 05:42

       关于 线程中创建非模态对话框 我试了很多方法,但是结果都是令人失望没有成功。但是经过我不懈的尝试终于找到了一个自己的方法,我不知道是否是标准的方法。估计有很多人都遇到过  线程中创建非模态对话框  的难题,所以我把我的方法拿出来供大家共同学习交流之用。

主要以下方法针对基于对话框的程序。

#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);

}