项目中需要用wxWidgets对注册表的键值进行读取.
使用wxRegKey的QueryValue方法读取相应键值时,例如以下代码。
如果 regdelay键值不存在会抛出一个异常。那么对用户来说体验很不好.
InBlock.gifpRegKey->QueryValue(wxT( "regdelay"), keyvaluestr);
 
查了下手册,开始发现有一个函数用于返回该键值是否存在的布尔值,不过在实际使用中发觉很不稳定,经常得不到正确的返回值。
InBlock.gifbool HasSubKey(const wxChar *szKey) const
不知道是自己使用的问题还是wxWidgets库本身的bug。进度催得紧,于是仔细研究了wxRegKey文档,写了一个函数,专门用于检测某键值是否存在,经测试表现还算稳定。
 
代码如下:
InBlock.gif bool VerifyEnCrptyFunction::RegKeyHasValue(wxString regkey,wxString key)
InBlock.gif{
InBlock.gif        wxRegKey pRegKey (pregkey);
InBlock.gif         if (pRegKey->Exists())
InBlock.gif        {
InBlock.gif                 if (pRegKey->Open())
InBlock.gif                {
InBlock.gif                         if ( pRegKey->HasValue(key))
InBlock.gif                        {
InBlock.gif                                 return true;
InBlock.gif                        }
InBlock.gif                         else
InBlock.gif                        {
InBlock.gif                                 return false;
InBlock.gif                        }
InBlock.gif                }
InBlock.gif        }
InBlock.gif         return false;
InBlock.gif}
 
 
具体使用方法:
InBlock.gif         //用户保存键值
InBlock.gif        wxString    keyvaluestr;
InBlock.gif         //构造一个注册表项路径
InBlock.gif        wxString    regkey=wxT( "HKEY_LOCAL_MACHINE\\Software\\iLcd");
InBlock.gif         if (RegKeyHasValue(regkey,wxT( "regdelay")))
InBlock.gif        {
InBlock.gif                 //有regdelay查询该键值下的内容
InBlock.gif                pRegKey->QueryValue(wxT( "regdelay"), keyvaluestr);
InBlock.gif        }
InBlock.gif         else
InBlock.gif        {
InBlock.gif                 //没有regdelay返回no value
InBlock.gif                keyvaluestr=wxT( "no value");
InBlock.gif        }