开CMainFrcom 节点,双击其中
的OnCreate()函数,就可以在右侧客户区编辑CMainFrcom::OnCreate()函数。OnCreate()函数
是CWnd 中窗口创建消息WM_CREATE 的处理函数,在使用AppWizard 生成的SDI 和MDI
程序中,CMainFrcom 类已经默认添加了OnCreate()函数。在该函数中添加模态登录对话框的
使用代码。
(3)创建CLoginDialog 对话框类的对象实例。在CMainFrcom::OnCreate()函数最后的
return 语句前加入如下代码:
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·74·
CLoginDialog dlg; //创建CLoginDialog 的对象
其次在创建对象后,可以加入其他代码,对对象的一些成员变量进行设置。
3.运行模态对话框并获得返回值
创建对话框类的实例后就可以通过CDialog::DoModal()函数运行模态对话框,并得到对
话框的返回值。在上一步中创建对象的代码后继续添加如下代码:
//运行模态对话框并获得返回值
//如果返回值为IDCANCEL 则退出程序
if (dlg.DoModal()==IDCANCEL)
return -1; //返回值为-1,告诉MFC 销毁窗口
CDialog::DoModal()函数的原形如下:
virtual INT_PTR DoModal( );
该函数根据对话框类对应的模板打开一个对话框,并挂起非该对话框的用户输入权,直
到该对话框关闭。返回值是通过CDialog::EndDialog()函数设置的,该函数用于关闭对话框,
并将惟一的参数作为DoModa()函数的返回值供调用窗口访问。
在4.1.3 节第4 部分的消息处理函数代码中,CLoginDialog::OnOK()验证用户名和密码失
败时,就调用了EndDialog()函数,并设置参数为IDCANCEL。因此如果验证失败,DoModal
函数就会得到IDCANCEL 的返回值,之后程序退出。到此,整个实例的功能已经实现。
运行程序,首先看到如图4-19 所示的登录对话框,提示程序用户输入用户名和密码,如
果输入错误,则退出程序,如果输入正确,则打开主窗口。
图4-19 登录对话框的运行效果
此外,对话框中的控件变量,在程序中可以直接访问。DoModal()结束后,控件变量的
值就是对话框结束前的最终结果。例如在实例Sample4_1 的CMainFrcom::OnCreate()函数中,
访问dlg.m_szLoginNcom 就可以获取用户的登录名。
4.3 非模态对话框
本节将介绍另一类型的对话框,即非模态对话框的使用。这类对话框在没有关闭前,也
能允许其他应用程序继续运行,并可以在应用程序间互相切换窗口。因此此类对话框的生存
周期较长,也就是说非模态对话框的对象生