首页上一页 1 下一页尾页 1 条记录 1/1页
重谈《Visual C++从入门到精通》
发表在C语言图书答疑
2012-12-23
是否精华
是
否
版块置顶:
是
否
老师,您好:
上一次的问题,老师给我回答如下:
我的问题:
《Visual C++从入门到精通》2008年第1版,第12章习题1,在光盘上是:
E:\TM\sl\12\9\DigitStatic ,其中文件 DigitStatic.cpp中第92行:
SubclassDlgitem(uID, pParent);
为了查看其操作,我自己重新编写了个程序,可不能执行。
老师的回答:
SubclassDlgitem这个函数主要用于子类化。子类化的意思就是本章所提到的使用已有的控件作为基类,使用子类继承它,使当前对话框与其相连接,并确实这个子类控件能够接受消息。
那么,使用此函数时,必须先创建一个子类控件继承对话框上已有的控件。在对话框内创建子类控件的实例成员(例如一个继承自CStatic的子类CStaticEx,在对话框类中创建一个此类型的成员变量),使用这个函数将它和当前对话框相联系起来。
我重新创建基本对话框的步骤如下:
(1) 创建一个基本对话框应用程序 MyStatic;
(2) 向对话框中添加一个静态文本控件;
(3) 改变此静态文本控件的 ID为:IDC_MYSTATIC;
(4) 在Class View视窗内右键选 MyStatic classes,在弹出的“新建类”窗口中,创建继承基类为 CStatic类的子类 CStaticEx;
(5) 在对话框的头文件 MyStaticDlg.h中,添加语句:#include "StaticEx.h";
(6) 打开类向导,为静态文本控件( IDC_MYSTATIC )添加变量 m_StaticEx; ( m_StaticEx 的 Type是:CStatic );
(7) 在对话框的头文件 MyStaticDlg.h中,找到语句:CStatic m_StaticEx,将其改为:CStaticEx m_StaticEx;
(8) 在对话框的源文件 MyStaticDlg.cpp的初始化函数 OnInitDialog()中,添加一个语句:
m_StaticEx.SubclassDlgitem(IDC_MYSTATIC, this);
程序编译通过了,可运行 MyStatic.exe 时,还是出现错误:Debug Assertion Failed ! 只能终止。
请老师帮我检查一下,以上步骤错在哪里了? 谢谢!
上一次的问题,老师给我回答如下:
我的问题:
《Visual C++从入门到精通》2008年第1版,第12章习题1,在光盘上是:
E:\TM\sl\12\9\DigitStatic ,其中文件 DigitStatic.cpp中第92行:
SubclassDlgitem(uID, pParent);
为了查看其操作,我自己重新编写了个程序,可不能执行。
老师的回答:
SubclassDlgitem这个函数主要用于子类化。子类化的意思就是本章所提到的使用已有的控件作为基类,使用子类继承它,使当前对话框与其相连接,并确实这个子类控件能够接受消息。
那么,使用此函数时,必须先创建一个子类控件继承对话框上已有的控件。在对话框内创建子类控件的实例成员(例如一个继承自CStatic的子类CStaticEx,在对话框类中创建一个此类型的成员变量),使用这个函数将它和当前对话框相联系起来。
我重新创建基本对话框的步骤如下:
(1) 创建一个基本对话框应用程序 MyStatic;
(2) 向对话框中添加一个静态文本控件;
(3) 改变此静态文本控件的 ID为:IDC_MYSTATIC;
(4) 在Class View视窗内右键选 MyStatic classes,在弹出的“新建类”窗口中,创建继承基类为 CStatic类的子类 CStaticEx;
(5) 在对话框的头文件 MyStaticDlg.h中,添加语句:#include "StaticEx.h";
(6) 打开类向导,为静态文本控件( IDC_MYSTATIC )添加变量 m_StaticEx; ( m_StaticEx 的 Type是:CStatic );
(7) 在对话框的头文件 MyStaticDlg.h中,找到语句:CStatic m_StaticEx,将其改为:CStaticEx m_StaticEx;
(8) 在对话框的源文件 MyStaticDlg.cpp的初始化函数 OnInitDialog()中,添加一个语句:
m_StaticEx.SubclassDlgitem(IDC_MYSTATIC, this);
程序编译通过了,可运行 MyStatic.exe 时,还是出现错误:Debug Assertion Failed ! 只能终止。
请老师帮我检查一下,以上步骤错在哪里了? 谢谢!