VC模态对话框的hWnd值为空意味着什么?

今天在写一个登录框的时候用到模态对话框,作用是类似QQ登录,以前总是想着如果用户输入的用户名或者密码错了,咱就MessageBox()一个错误提示,告诉它输入有误,现在想着这样挺烦的,不如弄个静态框,在上面写出红色字来提示。于是我按这种想法去做了,两个编辑框,对应的CEdit变量为m_teacherno_ctrl,m_teachaerpassword_ctrl,一用起来傻眼了,每次运行到

logindlg.m_teacherno_ctrl.GetWindowText(teacherno);
logindlg.m_teacherpassword_ctrl.GetWindowText(password)

就出错了

其中logindlg是对话框类对象,与模态对话框资源是对应的.

我调试运行后发现这个对话框和上面所有的控件对应的变量的hWnd都为空,我晕啊,这样也就意味所在GetDlgItem(),GetWindowText,SetWindowText之类的函数都是不能使用的。

为什么会这样呢,我现在没有时间去追究了,还有更重要的功能要去实现。模态对话本来就是为了做一些简单的工作,可能没有必要去存储那些值吧,而我要实现的功能完全可以用非模态对话框来实现。

 

另外,模态对话框上的两个编辑框的值怎么取出呢,可以为它们绑定CString类型变量,在OnOK()之后可以得到输入到编辑框里面的值

 

现在知道为什么了,生成一个模态对话框我们这样写:

CDiaolg mydlg;

if(mydlg.DoModal()==IDOK)

{

  ..............

}

if成立的条件是OnOK()被调用即默认的确定按钮被点击了,想想看,这时对话框已经关闭了!虽然mydlg类可能依然存在,但对应的m_hWnd值已经为空了,这可能是框架为我们做了些工作,这里也显示了窗口类与窗口的联系与区别了,而且窗口不再使用了,释放窗口资源句柄也是合情合理

如果你想在点击确定按钮时干点什么,你可以到mydlg的成员函数中去,而不应该在上面的"......."的位置做.

你可能感兴趣的:(VC模态对话框的hWnd值为空意味着什么?)