使用BCGControlBar界面库时的预写注册表问题

来源:互联网 发布:mp288正版清零软件 编辑:程序博客网 时间:2024/06/16 15:43
 使用BCGControlBar界面库时,发现菜单项居然修改不了了。上网搜索了一下,原来有这样一个问题:
BCG每次编译后,将界面信息写入了注册表,其中.rc记录第一次生成时的信息,之后再对界面进行修改将发现其无效!?
 解决方法1:将BCG在注册表中生成的项目下的setting文件夹删除。具体位置:HKEY_CURRENT_USER->software->
“应用程序生成向导”->具体的项目名->setting,其中“应用程序生成向导”是由xxApp::instance()中的
SetRegistryKey(_T("xx"))定义。
 这样就导致每需要一次修改就要删除一次注册表,颇有不便,于是就有解决方法2,在介绍解决方法2之前,先来讨论一下,
为什么BCGControlBar采取这种设计?有的朋友认为这是一个bug,或者是一个失败的设计。BCG的开发人员如此设计自有他们的用意,
就我的感觉,这样的设计是为了记录上次修改的结果,比如说悬停窗口,上次程序结束时是停靠,下次程序开始时还是停靠,这是对有效修改
的保护,这种修改是在程序运行后对界面的调整,比如工具栏的停靠位置,比如程序的风格,都会和上次程序结束时一样。但是,如果对源代
码进行修改,这种修改将无法被记录,删除注册表就成为了一个解决方法。
 再介绍另外一个解决方法。
 解决方法2:阻止BCG写入注册表,即在xxApp::Instance()中的SetRegistryKey()之上添加:m_bSaveState = false,
将这个成员设为FALSE,程序将不进行注册表的预写入。但使用这个方法的弊端是:程序运行后对界面的调整也无法记录的。折中一下,需要
写入注册表时,就将 m_bSaveState = false 注释掉吧。
 还有其它几种方法,都差不多,这里就不介绍了。
原创粉丝点击