您的位置:首页 > 编程语言 > C语言/C++

VC++中不能为控件添加成员变量 深入本质

2012-04-25 11:42 429 查看
项目疑问

提出问题

1,在资源视图--右键单击--添加--资源,选择对话框后—在里面添加文本框时,不能为文本框添加成员变量。而在“解决方案资源管理器”中右键单击添加资源—对话框后,可以使用添加成员变量向导。为什么???(4-25)

分析问题

境界1:这是因为改了对话框ID,默认情况下可以添加成员变量,当改变了对话框ID后就不能添加成员变量了。

境界2:原来是没有为对话框创建类。当创建类后,在类的头文件里会有一个

// 对话框数据
enum { IDD = IDD_DIALOG_LOGIN };
如果此时修改对话框ID,由于上面语句不变,出现新老ID不一致的情况,故不能添加变量。
导出问题:两个宏可以有相同的值吗?答:可以
解决问题
要能添加变量,必须满足以下条件:
(1) 对话框添加类
(2) enum{IDD=···}中的ID和对话框属性里的ID(数值)相同。
(3) Resultion.h有定义
注意1:就算只改对话框属性里的对话框ID,然后编译,系统会提示,此时选“是”或“全是”,系统会自动在Resultion.h中修改,使修改后的对话框ID和修改前的对话框ID相同,故此时不用在对话框的类头文件里修改enum{}。但是这种方法只能用一次,因为在Resultion.h中可以连续自动添加,但是对话框类头文件里不会自动修改。如果连续修改ID,则要把enum{}总的也要修改。总之,为了保持一致性,以上三处都要手动修改。
注意2:数值相同即如果在Resultion.h中定义宏
#define IDD_DIALOG_SET_SYSTEM 132
#define IDD_DIALOG_SETSYSTEM 132
则对话框头文件中,下面3条语句等效:
enum { IDD = IDD_DIALOG_SET_SYSTEM};
enum { IDD = IDD_DIALOG_SETSYSTEM };
enum { 132 };
注意3:
无论控件或对话框的ID修改甚至删除,在编译(F5)时,都会弹出上图对话框提示重新加载Resultion.h,选择是或全是系统自动添加或删除ID
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: