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

本文探讨了在使用模态对话框时遇到的问题:当对话框关闭后,尝试获取编辑框中的值导致句柄为空。文章解释了原因,并提供了解决方案:通过绑定CString变量在OnOK()后获取值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在写一个登录框的时候用到模态对话框,作用是类似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的成员函数中去,而不应该在上面的"......."的位置做.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值