我是新手,照着书上的例子编程在对话框上创建一个按钮。编译没有问题,运行时却出现:Debug Assertion Failed!后边还有什么什么wincore.cpp Line:638之类的。调试了一天,也在网络上差了不少资料,有人说是指针或堆栈问题,但没有细说,我还是不大回弄。
我的ide是vs2008。先是创建了一个基本对话框的应用程序Ex_DlgCtrls,然后为CEx_DlgCtrlsDlg类创建了一个CButton类型的成员变量m_btnWnd。接着在Cex_DlgCtrlsDlg的函数OnInitDialog函数中添加了如下代码:
m_btnWnd.Create("你好",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201); //创建
CFont *font=this->GetFont(); //获取对话框的字体
m_btnWnd.SetFont(font); //设置控件字体
然后就保存,编译,没有问题。但运行就出了上述说的问题。我跟踪程序时,发现程序运行到上面那三行代码的第一行的时候就出问题了,但不会改。
具体的project我保存在邮箱的附件里了(我不知道为什么不能用这例的附件,只好注册了个邮箱,地址是[email protected],密码123456,里面收件箱名叫“工程代码”的邮件就是了)。
先感谢大家的帮忙了。
我的ide是vs2008。先是创建了一个基本对话框的应用程序Ex_DlgCtrls,然后为CEx_DlgCtrlsDlg类创建了一个CButton类型的成员变量m_btnWnd。接着在Cex_DlgCtrlsDlg的函数OnInitDialog函数中添加了如下代码:
m_btnWnd.Create("你好",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201); //创建
CFont *font=this->GetFont(); //获取对话框的字体
m_btnWnd.SetFont(font); //设置控件字体
然后就保存,编译,没有问题。但运行就出了上述说的问题。我跟踪程序时,发现程序运行到上面那三行代码的第一行的时候就出问题了,但不会改。
具体的project我保存在邮箱的附件里了(我不知道为什么不能用这例的附件,只好注册了个邮箱,地址是[email protected],密码123456,里面收件箱名叫“工程代码”的邮件就是了)。
先感谢大家的帮忙了。
那个邮箱不知道为什么上不去了--!我又注册了个,地址是[email protected],密码123456
恩,发过去了,project文件。谢谢你的帮忙。
if (btnWnd.GetSafeHwnd() == NULL)
按钮应该是在对话框创建之前创建的` 这是修改后的``
[code=C/C]
int CEx_DlgCtrlsDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1; // TODO: ÔÚ´ËÌí¼ÓÄúרÓõĴ´½¨´úÂë
m_btnWnd.Create("你好",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201); //创建
CFont *font=this->GetFont(); //获取对话框的字体
m_btnWnd.SetFont(font); //设置控件字体 return 0;
}
[/code]
有点晕,我需要先在类里添加一个OnCreate函数么?在对话框之前创建按钮,就是说在OnInitDialog函数中先执行OnCreate再执行CDialog::OnInitDialog()吗?那个参数LPCREATESTRUCT lpCreateStruct我也不知道是什么呢。有点不大会改。