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

项目疑问

提出问题

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

 

 

 

 

 


你可能感兴趣的:(调试,点滴,MFC,C++)