RSS 2.0 Feed
2005-07 Entries
摘要:微软的桌面搜索API推出也有一段时间了,但是网上可以找到的相关技术资料还不多。官方的资料在http://addins.msn.com/devguide.aspx可以看到,而且网页上有SDK和一个C#的示例供下载。使用搜索API非常的简单,首先创建一个桌面搜索对象BOOL CWDSSampleView::PreCreateWindow(CREATESTRUCT& cs){ // TODO: Modify the Window class or styles here by modifying //  the CREATESTRUCT cs if(m_pSearchDesktop.CreateInstance(CLSID_SearchDesktop)) {  AfxMessageBox(IDS_FAILED_TO_CREATE_SEARCH_ENGINE);  return FALSE; } ……之后就可以开始执行搜索了。桌面搜索对象有两个方法,ExecuteSQLQuery和ExecuteQuery,都返回一个ADO记录集对象。ExecuteQuery是对用户比较友好的版本,参数虽然比较多,但是不需要自己构建SQL;而ExecuteSQLQuery是底层版本,只有一个参数——需要自己构造的SQL。相信我,你不会渴望自己来创建SQL的。传递给ExecuteQuery的参数就已经够长的了。字符串表中IDS_COLUMNS_GENERAL的内容是:DocTitle,DocFormat,Url,DocAuthor,PrimaryDate,FileName, FileExt,IsAttachment,Characterization,Rank,PerceivedType, HasAttach,DocTitlePrefix,FileExtDesc,DisplayFolder, DocKeywords,DocComments,ConversationID,Size, Create,Write。 void CWDSSampleView::Search(LPCTSTR lpszQuery,LPCTSTR lpszSort){ CString strQuery(lpszQuery);if(strQuery.IsEmpty())return; CString strSort(lpszSort); USES_CONVERSION; HRESULT hr=S_OK; GetListCtrl().SetItemCount(0); ClearCache(); try{  CString strColumns;  VERIFY(strColumns.LoadString(IDS_COLUMNS_GENERAL));  if(strSort.IsEmpty())   m_pRecordset=m_pSearchDesktop->ExecuteQuery(T2OLE(strQuery),    T2OLE(strColumns),NULL,NULL);  else   m_pRecordset=m_pSearchDesktop->ExecuteQuery(T2OLE(strQuery),    T2OLE(strColumns),T2OLE(strSort),NULL);  int nItemCount=m_pRecordset->GetRecordCount();  GetListCtrl().SetItemCount(nItemCount);   } catch(_com_error&e) {  …… }} 但是,访问返回的记录集的速度比访问数据库要慢。我不得不用虚列表和缓存来提高性能。在搜索结果很多(例如关键字选择"Microsoft")时程序有假死现象——当然也不排除我选择的字段过多的原因。 最近在写一个14位CPU的模拟器,CPU指令长度是固定的——13字节,十分的不吉利^_^b,而且CPU指令集中一些特定指令会根据上下文判断是否跳过下一个指令。但是在Intel系统上没有这样的指令,而且指令长度是可变的,所以无法知道下一个指令的长度来跳过它。我现在是在内存中设置一个标志,在执行每个指令之前检查这个标志来判断前一个指令是否指明跳过当前指令——低效,但是可以正常工作。 现在我知道一些模拟器为什么慢得像乌龟爬了……...[阅读全文]

posted @ | Feedback (3) | Filed Under [ 随笔 用户界面 程序人生(Programming on the fly) 调试技巧(Debugging) 集成开发环境(IDE) 类库(Library) 平台SDK(Platform SDK) 数据访问(Data Access) 文档(Documentation) 组件开发(Component Development) ]

摘要:Hook DHTML Commands 浏览器在执行很多命令之前都会允许容器来替换默认的处理。在执行一些默认的命令之前,系统会查询用户对IDocHostUIHandler的实现对象的IOleCommandTarget接口,调用默认(NULL)或者CGID_DocHostCommandHandler命令组的命令。如果容器的对应命令处理返回S_OK。那么默认的处理就不会被调用。 下面列出一些可以在容器中自定义的操作:(这些常量的定义位于docobj.h中) OLECMDID_PRINT,默认命令组 OLECMDID_SHOWSCRIPTERROR, CGID_DocHostCommandHandler命令组 OLECMDID_FOCUSVIEWCONTROLSQUERY, CGID_DocHostCommandHandler命令组 OLECMDID_SHOWPAGEACTIONMENU, CGID_DocHostCommandHandler命令组 MFC提供了一些比较容易扩展的类和宏,这样可以很容易地在扩展容器来实现新的接口。这里使用CCmdTarget类提供的GetInterfaceHook虚函数来进行扩展。 //This sample is based on MFC sample DHTMLExplore. //a button is inserted into explore.htm: //<BUTTON class=hotElement id=print accesskey="P"><U>P</U>rint</BUTTON> //to invoke the print command #include <afxole.h> #include <mshtmcid.h> ///////////////////////////////////////////////////////////////////////////// // CDHtmlExploreDlg dialog class CDHtmlExploreDlg; //customize the CBrowserControlSite class to implement IOleCommandTarget. //the IDocHostUIHandler interface is implemented in CBrowserControlSite, //an internal control site class declared within afxdhtml.h class CDHtmlExploreControlSite: public CBrowserControlSite , public IOleCommandTarget CDHtmlExploreControlSite( COleControlContainer* pCtrlCont, CDHtmlExploreDlg *pHandler) : CBrowserControlSite(pCtrlCont,pHandler){}; protected: // Implementation ......[阅读全文]

posted @ | Feedback (6) | Filed Under [ 用户界面 HTML编程(IE Programming) 集成开发环境(IDE) 脚本(Scripting) 类库(Library) 平台SDK(Platform SDK) 语言(Language) ]