6.2.2 显示对话框
在Windows系统中对话框可以分为两类,分别是模态对话框和非模态对话框,两种对话框的显示方法是不同的,下面分别进行介绍。
1.模态对话框的显示(DoModal方法)
模态对话框的特点是在对话框弹出以后,其他程序会被挂起,只有当前对话框响应用户的操作,在对话框关闭前用户不能在同一应用程序中进行其他操作。要显示模态对话框,首先要为模态对话框声明一个对象,然后调用该对象的DoModal方法进行显示(DoModal方法用于创建并显示一个模态对话框)。
语法格式如下:
返回值:DoModal方法返回一个整数值,该数值可以应用于EndDialog方法。如果方法返回值为-1,表示没有创建对话框;如果为IDABORT,表示有其他错误发生。
关闭模态对话框时,可以调用CDialog类的OnOK方法或OnCancel方法进行关闭。用户单击OK按钮(按钮ID为IDOK)时调用OnOK方法,该方法在内部调用了EndDialog方法,因此用户单击OK按钮时会关闭对话框。通常情况下,用户需要改写该方法,禁止调用基类的OnOK方法。当用户在对话框中单击ID为IDCANCEL的按钮或按Esc键时,程序将自动调用OnCancel方法,默认情况下OnCancel方法在内部调用EndDialog方法。如果用户在一个非模态对话框中实现OnCancel方法,需要在内部调用DestroyWindow方法,而不要调用基类的OnCancel方法,因为它调用EndDialog方法将使对话框不可见,但不销毁对话框。
例6.1 显示一个模态对话框。
CShowDlg dlg; //声明对话框类对象 dlg.DoModal(); //显示模态对话框 |
例6.2 关闭一个模态对话框。
CDialog::OnCancel(); //关闭模态对话框
|
2.非模态对话框的显示(Create方法)
非模态对话框在打开以后,不会影响其他线程处理消息。显示非模态对话框,首先要调用CDialog类的Create方法进行创建。
语法格式如下:
BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL ); BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
|
lpszTemplateName:标识资源模板名称。
pParentWnd:标识父窗口指针。
nIDtemplate:标识对话框资源ID。
返回值:如果对话框创建成功,返回值为非0,否则为0。
然后通过ShowWindow函数进行显示。
语法格式如下:
BOOL ShowWindow( int nCmdShow ); |
其中,nCmdShow指定了窗口的显示状态。
在销毁窗口时要使用CDialog类的DestroyWindow方法。
说明:如果一个窗口是父窗口,调用该窗口的DestroyWindow方法时,将销毁所有的子窗口。
例6.3 显示一个非模态对话框。
CShowDlg* dlg = new CShowDlg; //声明对话框指针 dlg->Create(IDD_SHOW_DIALOG,this); //创建非模态对话框 dlg->ShowWindow(SW_SHOW); //显示非模态对话框 |
例6.4 销毁一个非模态对话框。
dlg->DestroyWindow(); //销毁非模态对话框 delete dlg; //释放指针 |
【责任编辑:
夏书 TEL:(010)68476606】