代码改变世界

VC++替换控件ID引发的错误

2009-03-04 11:33  ubunoon  阅读(682)  评论(0编辑  收藏  举报
我在用vc 6.0开发程序的时候,发现载入图片的ID总是出现错误,很费解!!

后来经过调试与修改,终于了解一些内容。

为了获取方便,我将所有的ID号分类存储到一个类的const static变量中,这样便于循环遍历操作,但是这却引来了一个问题。

由于C++采用预编译的方式类进行修改,当这个类做完后编译变量值就已经确定了。

当我处理界面的时候,发现这个界面的控件使用的不是那么确切,删除界面上的控件,再将控件ID修改为原先的ID,这样,代码
中的很多内容就不需要修改了,这个时候,由于原先编译的const static变量的值是原先的值,而新增加控件的ID的值可能并不
是原先同名ID的值,这个时候,程序代码跑起来的时候,就会出现assert之类的错误了!!!

比方说我现在由一个CButton的控件ID(IDC_SHOW_MESSAGE),但是感觉用的不是那么确切,而系统中有另外一个控件类型CStatic,
这个时候,我删除在界面上CButton的控件,将CStatic的控件放置上去,将CStatic的ID修改为IDC_SHOW_MESSAGE,此时如果编译
运行,极有可能原先CButton的IDC_SHOW_MESSAGE与CStatic的IDC_SHOW_MESSAGE不是同一个数据值,而预编译的值还是原先的那个
值,此时可以通过这么一种方式来解决该问题:

先在定义const static 变量处打个空格之类的,然后修改控件IDC_SHOW_MESSAGE为其他的一个名字,之后修改为IDC_SHOW_MESSAGE
名称,编译运行,就可以解决上面的异常错误问题了!!!


很隐蔽,代码并没有错误,只是编译器的一个特性导致的一个问题。