vc6.0中手动修改Resource.h中控件的宏定义和过多全局变量两问题

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

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

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

2.例如#define IDC_EDIT13 1036 本来IDC_EDIT13是1035的,被我手动修改成1036。但我查找1036时出现
D:\ModbusSCommC-1\ModbusSComm\resource.h(46):#define IDC_EDIT13                      1036
文件夹 'D:\应用软件-安装\VC98\CRT\SRC' 不存在, 将停止搜索.
D:\应用软件-安装\VC98\INCLUDE\DEVTYPE.H(142):#define dispidTSDevCount 1036
D:\应用软件-安装\VC98\INCLUDE\DEVTYPE.H(188):#define dispidDevRun 1036

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

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

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

望各位大神积极指导!
困惑的小鸟献上
2012-12-7
...全文
605 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
类的成员变量,对于类的一个实例(即对象)来说,可以认为是全局,因为每个成员函数都可以访问。 但是对于类的多个不同实例(对象)来说,内存中各有各的一份成员变量,所以并不是真正的“全局”。 在类外定义的全局变量,才是真正的全局,在(同一个模块的)内存中只存在唯一的一份。 全局变量的定义,同上,一般常量(const)可以写在头文件中,非常量写在源文件中,其它源文件中 如果要引用,加上一个extern声明即可。这是因为非常量的全局变量同一模块中只能有一份,不允许 出现同名,如果写在头文件中,被多个源文件包含,在链接期就可能报.obj中定义的符号冲突。
  • 打赏
  • 举报
回复
引用 10 楼 schlafenhamster 的回复:
"float m_Edit14" 知道这个m_的 意思吗, 他是向导 加的表示是 模块_ 变量。 他的 位置 在 类中。 如果是 全局 变量 就要 放 在 .cpp 没有 {} 的 部分中。
m_前缀的m并不是module(模块)的缩写,而是member(成员)的缩写,表示是成员变量。 (这种命名方法叫做“匈牙利命名法”,百度一下吧,微软的一名匈牙利籍工程师首创的。)
asdjy123 2012-12-10
  • 打赏
  • 举报
回复
谢谢各位大神的解答,结贴了
skyandcode 2012-12-09
  • 打赏
  • 举报
回复
引用 9 楼 asdjy123 的回复:
引用 7 楼 skyandcode 的回复:2.会有关联,把那些你不想操作的ID改了。 3.一般我使用的是变量="";UpdateData(FALSE); 2、能说说有什么关联吗, 3.本来我也是像你这样,就是因为有15个变量,不是要写15个相同的句子?这样感觉太多了,所以我才去修改Resourse.h文件的
ID是一个控件的唯一标识,你有三个变量是相同的ID,操作起来会出现问题的。 15个变量都赋为空,一个UpdateData(FALSE)很麻烦吗
asdjy123 2012-12-09
  • 打赏
  • 举报
回复
嗯,明白了
schlafenhamster 2012-12-09
  • 打赏
  • 举报
回复
全局变量最好不要放在 .h 中。因为如果这个头文件被 #include 多次的话, 变量 会 重复定义。 当然他也是 全局变量。
asdjy123 2012-12-09
  • 打赏
  • 举报
回复
引用 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吧
skyandcode 2012-12-08
  • 打赏
  • 举报
回复
2.会有关联,把那些你不想操作的ID改了。 3.一般我使用的是变量="";UpdateData(FALSE);
傻X 2012-12-08
  • 打赏
  • 举报
回复
引用 8 楼 asdjy123 的回复:
引用 5 楼 tiger9991 的回复:3.DoDataExchange里面绑定 4.Create每个控件都有的方法。如果控件是拖拽的就不需要Create 3、我查看下DoDataExchange函数,自己定义控件变量的话 就在DoDataExchange()定义下,如:DDX_Text(pDX, IDC_EDIT5, m_Edit5),再在.h文件里定义类型就行……
控件是拖拽的就没办法Create了。 你这么多控件都拖拽?累死的吧。
schlafenhamster 2012-12-08
  • 打赏
  • 举报
回复
"float m_Edit14" 知道这个m_的 意思吗, 他是向导 加的表示是 模块_ 变量。 他的 位置 在 类中。 如果是 全局 变量 就要 放 在 .cpp 没有 {} 的 部分中。
asdjy123 2012-12-08
  • 打赏
  • 举报
回复
引用 7 楼 skyandcode 的回复:
2.会有关联,把那些你不想操作的ID改了。 3.一般我使用的是变量="";UpdateData(FALSE);
2、能说说有什么关联吗, 3.本来我也是像你这样,就是因为有15个变量,不是要写15个相同的句子?这样感觉太多了,所以我才去修改Resourse.h文件的
asdjy123 2012-12-08
  • 打赏
  • 举报
回复
引用 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……
嗯,你这方法比我的好多了,以后用你这种。
roger_ding 2012-12-08
  • 打赏
  • 举报
回复
我一般会按以下方法写(建议不管什么情况下,都不要去修改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数组即可,别的代码都无需改动
傻X 2012-12-07
  • 打赏
  • 举报
回复
3.DoDataExchange里面绑定 4.Create每个控件都有的方法。如果控件是拖拽的就不需要Create
asdjy123 2012-12-07
  • 打赏
  • 举报
回复
引用 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控件吗
asdjy123 2012-12-07
  • 打赏
  • 举报
回复
下面代码中是我对话框类的。h文件里的,前面是自己定义的,后面是类向导定义的。这个不是全局变量?那全局变量是在哪定义才算,难到是在stdafx。cpp中? 我的项目是基于对话框的MFC

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
}

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

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧