如何创建和使用无模式对话框

来源:互联网 发布:淘宝用是谁写的 编辑:程序博客网 时间:2024/05/21 09:25

如何创建和使用无模式对话框

MFC将模式和无模式对话封装在同一个类中,但是使用无模式对话需要几个对话需要几个额处的步骤。首先,使用资源编辑器建立对话资源并使用ClassWizard创建一个CDialog的派生类。模式和无模式对话的中止是不一样的:模式对话通过调用CDialog : : EndDialog 来中止,无模式对话则是调用CWnd: : DestroyWindow来中止的,函数CDialog : : OnOK和CDialog : : OnCancel调用EndDialog ,所以需要调用DestroyWindow并重置无模式对话的函数。
void CTDialog : : OnOK ( )
{
 // Retrieve and validate dialog data .
 if (! UpdateData (TRUE) )
 {
 // the UpdateData rountine
will set focus to correct item TRACEO (" UpdateData failed during dialog termination .\n")
 return
 }
 //Call DestroyWindow instead of EndDialog .
 DestroyWindow ( )
}
void CTDialog : : OnCancel ( )
{
 //Call DestroyWindow instead of EndDialog .
 DestroyWindow ( )
}
其次,需要正确删除表示对话的C++对象。对于模式对来说,这很容易,需要创建函数返回后即可删除C++对象;无模式对话不是同步的,创建函数调用后立即返回,因而用户不知道何时删除C++对象。撤销窗口时工作框调用CWnd : : PostNcDestroy,可以重置该函数并执行清除操作,诸如删除this指针。
void CTDialog : : PostNcDestroy ( )
 {
 // Declete the C++ object that represents this dialog.
 delete this
最后,要创建无模式对话。可以调用CDialog : : DoModal创建一个模式对放,要创建一个无模式对话则要调用CDialog: : Create。下面的例子说明 了应用程序是如何创建无模式对话的: 象;无模式对话不是同步的,创建函数调用后立即返回,
void CMainFrame : : OnTDialog ( )
{
 //Allocate a modeless dialog object .
 CSampleDilog * pDialog =new CSampleDialog
 ASSERT_VALID (pDialog) Destroy ( )
 //Create the modeless dialog . represents this dialog.
 BOOL bResult = pDialog —> Creste (IDD_IDALOG)
 ASSERT (bResult )
}
0 0
原创粉丝点击