+ -
当前位置:首页 → 问答吧 → 关于mfc的弹出窗口,弹出窗口的句柄为0

关于mfc的弹出窗口,弹出窗口的句柄为0

时间:2011-11-26

来源:互联网

新手,勿笑;
前几天写了一个mfc的小程序,用来管理学生数据;
一直都是正常的,今天边学边写了一个弹出窗口;
首先,主对话框下面有一个按钮,
我想通过单击它产生一个弹出窗口;
然后弹出窗口中有一个文本框,会有一个默认值,比如姓名;
为了实现这个功能;
我画了一个弹出窗口;
创建了类;
并且也在按钮的函数中使用了DoModal();
我在弹出窗口类的构造函数中写了一句:
text_mo_name.SetWindowText("123");
结果报错

---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!

Program: d:\文档\visual studio 2010\Projects\ee\Debug\ee.exe
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp
Line: 246

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
---------------------------
中止(A) 重试(R) 忽略(I)
---------------------------

经过在检查,在构造函数中放置了一个this指针,设置了一个断点,发现this指针的hwnd是NULL导致错误;
后来,在弹出窗口中添加了一个按钮,通过点击按钮来给文本框设置显示的字符;
然后就可以正常显示了;
但是,这样不符合我的初衷;
要怎样解决这个问题??
简单来说,就是想在弹出文本框的时候,让文本框显示一个东西;
还有一点,为什么我在窗口预览的时候,所有按钮都是win7的圆角按钮,但是程序实际运行时却是像win95那样的直角按钮;
相当郁闷啊;

作者: ywwzwb   发布时间: 2011-11-26

好像,额,第一个问题解决了..........
我再初始化函数OnInitDialog()中添加了一句
CDialog::OnInitDialog();
好像就可以了
没加这句之前;
在这个函数中写text_mo_name.SetWindowText("123");也会有相同的错误,只不过这次换成文本框的句柄是NULL了;
不过第二个问题还是没有解决

作者: ywwzwb   发布时间: 2011-11-26

窗口类的构造函数在执行的时候,窗口还没有绘制好,还不能SetWindowText

作者: agoago_2009   发布时间: 2011-11-26