vc6.0中手动修改Resource.h中控件的宏定义和过多全局变量两问题 [问题点数:100分,结帖人asdjy123]



  • 不显示删除回复
  • 显示所有回复
  • 显示星级回复
  • 显示得分回复
  • 只显示楼主
  •        收藏




asdjy123

asdjy123 等级:

结帖率:100%

楼主 发表于: 2012-12-07 20:55:15



各位大神您们好:
   我主要是在修改清除按钮时遇到的疑问(1-3)以及憋了挺长时间的疑问(4)? 
   我在对话框中拉了15个Edit(IDC分别为IDC_EDIT1-15),并且每个都用类向导定义一个变量,通过点击“清除按钮”清除15个编辑框。函数里原来GetDlgItem(IDC_EDIT1)->SetWindowText("0")-GetDlgItem(IDC_EDIT15)->SetWindowText("0")共15个清0的,后来我用



C/C++ code










在Resourse.h发现15个宏定义的值不是连续的,所以我把Resourse.h里宏定义的不是连续的15个手动修改成连续的。然后运行程序也能正常清零。


现有以下几个疑问:



 1.程序中我还用到这15个控件使用类向导的方法定义的变量,这变量的使用会有影响吗?



2.例如#define IDC_EDIT13 1036 本来IDC_EDIT13是1035的,被我手动修改成1036。但我查找1036时出现




C/C++ code











有三个相关1036,dispidDevRun、dispidTSDevCount和IDC_EDIT13 会有关联吗?



3、大家一般清零用什么方法的?如果不用GetDlgItem(strIDC++)->SetWindowText("0.00");这种方法清零,15个可用其它简单方法清零吗?



4、像我这样在类向导中定义15个全局变量好不好,我发现我的项目中主对话框有61个全局变量其中类向导有39个,会不会有点多啊。而且都是公共的,61个基本上只在一个类中使用,变成保护属性会不会好点。能否把定义全局数组代替全局变量的


  


 望各位大神积极指导!


                                                          困惑的小鸟献上


                                                              2012-12-7





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理


回复次数:17


int                strIDC=IDC_EDIT1;              

                              for               (i=0;i<15;i++)              

                              {              

                              GetDlgItem(strIDC++)->SetWindowText(               "0.00"               );               //清除id为IDC_EDIT1的基本数据              

                              }



happyparrot 


快乐鹦鹉 等级:


3





2





4



更多勋章


#1 得分:15 回复于: 2012-12-07 21:10:32



 1.程序中我还用到这15个控件使用类向导的方法定义的变量,这变量的使用会有影响吗?
不会
2.dispidDevRun、dispidTSDevCount和IDC_EDIT13 会有关联吗?
不会。不同的用途。
3、大家一般清零用什么方法的?如果不用GetDlgItem(strIDC++)->SetWindowText("0.00");这种方法清零,15个可用其它简单方法清零吗?
没有什么太好的办法。
4、像我这样在类向导中定义15个全局变量好不好,我发现我的项目中主对话框有61个全局变量其中类向导有39个,会不会有点多啊。而且都是公共的,61个基本上只在一个类中使用,变成保护属性会不会好点。能否把定义全局数组代替全局变量的
你定义的是类成员变量,不是全局变量吧?定义数组没有必要,又没有什么相关性。


GMGC全球移动游戏商务对接会



对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



tiger9991 


傻X 等级:





4






更多勋章


#2 得分:15 回复于: 2012-12-07 21:38:11



1.不会

2.目测没关系,但是目前你只要保证资源编号都不同就没问题了,其他的变量仅仅是右值,没关系。

3.如果你保定了CString型变量m_cstr[15];
用个循环
 

for(i=0;i<15;i++)       
     {       
         m_cstr[i] = _T("0.00");//清除id为IDC_EDIT1的基本数据       
     }       
     UpdateData(False);


4.一般情况下,我会用数组定义控件指针CEdit * m_edit[15];
然后每个控件new一下,Create的时候可以输入资源编号1015+i  (最后一个参数就是)
i是for循环变量。


公告:CSDN新版首页上线



对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



asdjy123

asdjy123 等级:

#3 得分:0 回复于: 2012-12-07 21:41:13



下面代码中是我对话框类的。h文件里的,前面是自己定义的,后面是类向导定义的。这个不是全局变量?那全局变量是在哪定义才算,难到是在stdafx。cpp中?  我的项目是基于对话框的MFC



C/C++ code



?









引用 1 楼 happyparrot 的回复:


4、像我这样在类向导中定义15个全局变量好不好,我发现我的项目中主对话框有61个全局变量其中类向导有39个,会不会有点多啊。而且都是公共的,61个基本上只在一个类中使用,变成保护属性会不会好点。能否把定义全局数组代替全局变量的
你定义的是类成员变量,不是全局变量吧?定义数组没有必要,又没有什么相关性。



关注CSDN论坛微博 送积分大礼包



对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



class                CModbusSCommDlg :                public                CDialog              

               {              

               // Construction              

               public               :              

                              BYTE                m_RData[50];               //用来存储接受的数据              

                              int                m_RDataCount;               //接受数据个数              

                              int                m_RCount;               //正确报文帧计数              

                              int                m_WCount;               //错误报文帧计数              

                              CString strTemp;               //计算正确率的中间变量               

               ....              

                              

                              enum                { IDD = IDD_MODBUSSCOMM_DIALOG };              

                              float                   m_Edit1;              

                              float                   m_Edit10;              

                              float                   m_Edit11;              

                              float                   m_Edit14;              

                              float                   m_Edit15;              

                              float                   m_Edit2;              

                              //}}AFX_DATA              

               }


asdjy123

asdjy123 等级:

#4 得分:0 回复于: 2012-12-07 21:54:28



引用 2 楼 tiger9991 的回复:

3.如果你保定了CString型变量m_cstr[15];
用个循环
 

for(i=0;i<15;i++)         
     {         
         m_cstr[i] = _T("0.00");//清除id为IDC_EDIT1的基本数据         
     }         
     UpdateData


4.一般情况下,我会用数组定义控件指针CEdit * m_edit[15];
然后每个控件new一下,Create的时候可以输入资源编号1015+i  (最后一个参数就是)
i是for循环变量。



3.你这个m_cstr[15]怎么和edit控件连着?


4、Create什么?是创建edit控件吗







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



tiger9991 


傻X 等级:





4






更多勋章


#5 得分:10 回复于: 2012-12-07 22:39:42



3.DoDataExchange里面绑定
4.Create每个控件都有的方法。如果控件是拖拽的就不需要Create





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



roger_ding

roger_ding 等级:

#6 得分:10 回复于: 2012-12-08 01:28:14



我一般会按以下方法写(建议不管什么情况下,都不要去修改resources.h)

int m_iEditIds[] = { IDC_EDIT1, IDC_EDIT2, IDC_EDIT3 ... IDC_EDIT15 };       
 for(int i = 0; i < sizeof(m_iEditIds) / sizeof(m_iEditIds[0]); i++)       
 {       
     GetDlgItem(m_iEditIds[i])->SetWindowText("0.00");       
 }



以后如果控件有所改变,只要改动m_iEditIds数组即可,别的代码都无需改动





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



skyandcode

skyandcode 等级:

#7 得分:10 回复于: 2012-12-08 09:59:26



2.会有关联,把那些你不想操作的ID改了。
3.一般我使用的是变量="";UpdateData(FALSE);





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



asdjy123

asdjy123 等级:

#8 得分:0 回复于: 2012-12-08 15:52:21



引用 5 楼 tiger9991 的回复:

3.DoDataExchange里面绑定
4.Create每个控件都有的方法。如果控件是拖拽的就不需要Create


3、我查看下DoDataExchange函数,自己定义控件变量的话


就在DoDataExchange()定义下,如:DDX_Text(pDX, IDC_EDIT5, m_Edit5),再在.h文件里定义类型就行了,别的就没有关联了?


4、控件是拖拽的好还是create好。有原因吗?





引用 6 楼 roger_ding 的回复:


我一般会按以下方法写(建议不管什么情况下,都不要去修改resources.h)

int m_iEditIds[] = { IDC_EDIT1, IDC_EDIT2, IDC_EDIT3 ... IDC_EDIT15 };         
 for(int i = 0; i < sizeof(m_iEditIds) / sizeof(m_iEditIds[0]); i++)         
 {         
     GetDlgIte……


嗯,你这方法比我的好多了,以后用你这种。







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



asdjy123

asdjy123 等级:

#9 得分:0 回复于: 2012-12-08 15:57:36



引用 7 楼 skyandcode 的回复:

2.会有关联,把那些你不想操作的ID改了。
3.一般我使用的是变量="";UpdateData(FALSE);


2、能说说有什么关联吗,


3.本来我也是像你这样,就是因为有15个变量,不是要写15个相同的句子?这样感觉太多了,所以我才去修改Resourse.h文件的







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理




schlafenhamster

schlafenhamster 等级:





#10 得分:10 回复于: 2012-12-08 19:20:42



m_Edit14"
知道这个m_的 意思吗, 他是向导 加的表示是 模块_ 变量。
他的 位置 在 类中。

如果是 全局 变量 就要 放 在 .cpp 没有 {} 的 部分中。





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



tiger9991 


傻X 等级:





4






更多勋章


#11 得分:10 回复于: 2012-12-08 20:25:02



引用 8 楼 asdjy123 的回复:

引用 5 楼 tiger9991 的回复:3.DoDataExchange里面绑定
4.Create每个控件都有的方法。如果控件是拖拽的就不需要Create
3、我查看下DoDataExchange函数,自己定义控件变量的话
就在DoDataExchange()定义下,如:DDX_Text(pDX, IDC_EDIT5, m_Edit5),再在.h文件里定义类型就行……



控件是拖拽的就没办法Create了。


你这么多控件都拖拽?累死的吧。







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



skyandcode

skyandcode 等级:

#12 得分:10 回复于: 2012-12-09 09:15:46



引用 9 楼 asdjy123 的回复:

引用 7 楼 skyandcode 的回复:2.会有关联,把那些你不想操作的ID改了。
3.一般我使用的是变量="";UpdateData(FALSE);
2、能说说有什么关联吗,
3.本来我也是像你这样,就是因为有15个变量,不是要写15个相同的句子?这样感觉太多了,所以我才去修改Resourse.h文件的


ID是一个控件的唯一标识,你有三个变量是相同的ID,操作起来会出现问题的。


15个变量都赋为空,一个UpdateData(FALSE)很麻烦吗







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



asdjy123

asdjy123 等级:

#14 得分:0 回复于: 2012-12-09 14:00:02



引用 10 楼 schlafenhamster 的回复:

"float    m_Edit14"
知道这个m_的 意思吗, 他是向导 加的表示是 模块_ 变量。
他的 位置 在 类中。

如果是 全局 变量 就要 放 在 .cpp 没有 {} 的 部分中。


我还以为m_是变量的意思,原来是模块_ 变量,我这菜鸟学习的东西还很多。


 全局变量放在 .h 没有 {} 的 部分中行不行?算不算全局变量?还有如果要在别的。cpp应用,extern下就行。了?




Quote: 引用 11 楼 tiger9991 的回复:




控件是拖拽的就没办法Create了。
你这么多控件都拖拽?累死的吧。
quote]
嗯拖了一个对话框的控件我都搞了好长时间,还要对齐排序等等,我这菜鸟以后要向Create靠拢


Quote: 引用 12 楼 skyandcode 的回复:
ID是一个控件的唯一标识,你有三个变量是相同的ID,操作起来会出现问题的。
15个变量都赋为空,一个UpdateData(FALSE)很麻烦吗  
 quote]
”你有三个变量是相同的ID“好像没有相同的ID吧






对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理




schlafenhamster

schlafenhamster 等级:





#15 得分:10 回复于: 2012-12-09 14:14:14



全局变量最好不要放在 .h 中。因为如果这个头文件被 #include 多次的话, 变量 会 重复定义。
当然他也是 全局变量。





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



asdjy123

asdjy123 等级:

#16 得分:0 回复于: 2012-12-09 20:57:43



嗯,明白了





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理




asdjy123

asdjy123 等级:

#17 得分:0 回复于: 2012-12-10 08:23:13



谢谢各位大神的解答,结贴了