BOOL CTestDlg::OnInitDialog()
{
/*先调用父类的同名函数*/
CDialog::OnInitDialog();
/*填写你的初始化代码*/
return TRUE;
}
5.3 创建无模式对话框
无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。创建无模式对话框需要调用
BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );之后还需要调用 BOOL CDialog::ShowWindow( SW_SHOW);进行显示,否则无模式对话框将是不可见的。相关代码如下:
void CYourView::OnOpenDlg(void)
{
/*假设IDD_TEST_DLG为已经定义的对话框资源的ID号*/
CTestDlg *dlg=new CTestDlg;
dlg->Create(IDD_TEST_DLG,NULL);
dlg->ShowWindows(SW_SHOW);
/*不要调用 delete dlg;*/
}
在上面的代码中我们新生成了一个对话框对象,而且在退出函数时并没有销毁该对象。因为如果此时销毁该对象(对象被销毁时窗口同时被销毁),而此时对话框还在显示就会出现错误。那么这就提出了一个问题:什么时候销毁该对象。我时常使用的方法有两个:
? 在对话框退出时销毁自己:在对话框中重载OnOK与OnCancel在函数中调用父类的
同名函数,然后调用DestroyWindow()强制销毁窗口,在对话框中映射WM_DESTROY消息,在消息处理函数中调用delete this;强行删除自身对象。相关代码如下: ?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
? void CTestDlg1::OnOK() { CDialog::OnOK(); DestroyWindow(); } void CTestDlg1::OnCancel() { CDialog::OnCancel(); DestroyWindow(); } void CTestDlg1::OnDestroy() { CDialog::OnDestroy(); AfxMessageBox("call delete this"); delete this; }
这种方法的要点是在窗口被销毁的时候,删除自身对象。所以你可以在任何时候调用DestroyWindow()以达到彻底销毁自身对象的作用。(DestroyWindow()的调用会引起OnDestroy()的调用)
? 通过向父亲窗口发送消息,要求其他窗口对其进行销毁:首先需要定义一个消息用
于进行通知,然后在对话框中映射WM_DESTROY消息,在消息处理函数中调用消息发送函数通知其他窗口。在接收消息的窗口中利用ON_MESSAGE映射处理消息的函数,并在消息处理函数中删除对话框对象。相关代码如下:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
? /*更改对话框的有关文件*/ CTestDlg2::CTestDlg2(CWnd* pParent /*=NULL*/) : CDialog(CTestDlg2::IDD, pParent) {/*m_pParent为一成员变量,用于保存通知窗口的指针, 所以该指针不能是一个临时指针*/ ASSERT(pParent); m_pParent=pParent; //{{AFX_DATA_INIT(CTestDlg2) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTestDlg2::OnOK() { CDialog::OnOK(); DestroyWindow(); } void CTestDlg2::OnCancel() { CDialog::OnCancel(); DestroyWindow(); } void CTestDlg2::OnDestroy() { CDialog::OnDestroy(); /*向其他窗口发送消息,将自身指针作为一个参数发送*/ m_pParent->PostMessage(WM_DELETE_DLG,(WPARAM)this); } /*在消息接收窗口中添加消息映射*/ /*在头文件中添加函数定义*/ afx_msg LONG OnDelDlgMsg(WPARAM wP,LPARAM lP); /*添加消息映射代码*/
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-35251-40.html
任何一个门槛低的行业
你收家里