非模式对话框的创建不能象模式对话框一样调用DoModal来实现,
而应该用Create函数来创建,Create的原形如下: BOOL Create(UINT nIDTemplate,CWnd* pParentWnd = NULL) 其中nIDTemplate是对话框模板资源ID,pParentWnd是父窗口指针, 假如pParentWnd不为NULL,则此非模式对话框总在父窗口之上, 我们举例来说明在SDI程序中非模式对话框的建立过程: 首先我们创建一个SDI程序。 然后在资源编辑器里面制作好对话框模板IDD_MYDIALOG, 双击对话框资源,为对话框创建新的类CMyDialog,基类为CDialog 我们为VIEW类添加一个成员变量CMyDialog m_mydialog; 然后为VIEW类添加WM_CREATE消息处理函数,在其中加上 m_mydialog.Create(IDD_MYDIALOG,this);///创建 m_mydialog.ShowWindow(SW_SHOW); ///显示 至此我们已经成功地创建并显示出一个非模式对话框, 值得注意的是在摧毁非模式对话框不能调用CDialog::OnCancel, 因为OnCancel调用了EndDialog,而EndDialog只是使对话框不可见, 并没有删除它,所以应用程序需要重载OnCancel,并在其中调用 DestroyWindow。 |
|