编写可复用性更好的C++代码:Band对象和COMToys(4)
2006-07-21 11:46:12 来源:WEB开发网接下来,让我们研究一下CMyDeskBand(Web搜索框)。这里有趣的地方是编辑框控制,它在CEditSearch类中实现,为了在用户按下"Enter"(回车)键后接受到WM_CHAR消息,我添加了一个WM_GETDLGCODE消息处理器,其返回是DLGC_WANTALLKEYS。看看吧,所有Windows3.1的知识在这里仍然有用武之地。当用户按下"Enter"键时,CEditSearch截获它,然后OnChar调用DoSearch函数利用用户的输入信息来建立一个URL。这里需要用"+"来替代空格(spaces),所以如果你用Yahoo搜索"beanie baby sex"的话,则生成的URL将是:http://ink.yahoo.com/bin/query?p=beanie+baby+sex&z= 2&hc=0&hs=0,CEditSearch将传递这个串到IWebBrowser2::Navigate。CEditSearch中内建了几个搜索引擎,但你可以添加更多的搜索引擎进去,方法是编辑MyBands.ini文件。获得这个文件中URL最简单的方法是到你最喜欢的门户站点,用"MYSEARCH"作为搜索关键字,并将结果URL从地址栏贝到MyBands.ini文件中。
说到 MyBands 所使用的这个INI文件——其实在存储简单的应用程序配置信息时,注册表显得非常笨重,所以我写了一个小类:CIniFile来避免应用程序自动使用注册表。BOOL CMyBandsDll::InitInstance()
它告诉应用程序将INI文件放到程序或DLL所在的目录,不是Windows目录。如果你不调用SetRegistryKey 的话,MFC将默认使用INI文件,但它将这个文件放在Windows目录中。我喜欢将配置文件与使用它们的程序放在同一个目录中,这样你可以删除整个目录而不用关心会有额外的垃圾泛滥。如果你愿意的话,CIniFile可以让你选择使用Windows目录,或者指定一个不同的文件名。方法是将应用程序的m_pszRegistryKey设置为NULL并且将m_pszProfileName设置为INI文件的名字。当然,如果你使用INI文件,你就不能自动获得多个用户使用的机器上由注册表实现的用户指定设置。所以说你看着办吧,是控告我还是用SetRegistryKey。
{
// SetRegistryKey(_T("VCKBASE")); // 屏蔽掉注册表!
CIniFile::Use(this, CIniFile::LocalDir); // 使用INI文件!
}
更多精彩
赞助商链接