为BCG界面库的记忆特性所晕倒
同事使用BCGControlBarPro处理界面,今天在修改菜单资源时却发生一件很奇怪的事情:无论怎么修改,程序运行后始终显示的还是改动以前的菜单,多次清空临时文件、生成文件以及重新编译也无济于事。同事为此折腾了一个上午,郁闷得不行。
我用UltraEdit搜索了一下整个工程,并没有发现以前的字符串资源,因此排除了是编译器的问题。不是编译器的问题,那么就只能是BCG的问题了,我怀疑是BCG对资源进行了“记忆”处理,为了验证这一想法,我让同事将新生成的程序拷贝到一台没有使用过该程序的机器上,结果显示正常。
为了弄个究竟,我借助文件系统监视工具(FileMon)以及注册表监视工具(RegMon)对同事的程序进行监视,结果发现BCG在注册表的HKCU的Software目录下会以应用程序名建立一个注册表项,里面保存了程序的界面参数,删掉该注册项程序便能正常工作。困扰同事的问题终于水落石出。
后来我上网搜了一下,发现为此问题困苦不堪的朋友还不少,解决的方式是通过BCG提供的CleanState方法来清除掉缓存的数据。我没有用过BCG,但我对这样的处理感到很不理解,这样做的意义何在?不管什么目的,在实际应用中这都是一种很糟糕的设计。不过,话说回来,也许BCG的设计者真有什么特别的考虑,那还是等我以后什么时候接触到BCG再说吧。