pMsgCache->lpEntry = NULL; AfxUnlockGlobals(CRIT_WINMSGCACHE); return FALSE; } LDispatch: 注意 对查找结果的缓存可以提高查找的效率。 不要被MFC起的名字欺骗了,从数据结构上来说,查找是顺序的,而不是使用CMap类使用的散列技术,所以把最常用的映射项放在最前面有助于提高效率。 使用查找映射的好处是,可以方便地在派生类中扩展和覆盖映射(例如重新实现IDispatch),而不用重写/重载查找函数(消息和命令的分发,或者接口的查询);也可以不使用对资源消耗很大的虚函数表。(尽管如此,CWnd类还是有无数个虚函数,并且不出意外地看到,在MFC6到MFC7的升级中又有增加) 使用查找映射的坏处么,当然是理解上的问题和性能上的损失了。 句柄映射 MFC在把句柄封装成对象方面不遗余力,为了保证同一线程内对象<->句柄映射是一对一的,创建了各种各样的句柄映射,窗口,GDI对象,菜单诸如此类。为了封装GetDlgItem,SelectObject这样的API返回的临时的句柄,MFC还产生临时的对象<->句柄映射。句柄映射使得GetParentFrame这样的函数可以实现。 CFrameWnd* CWnd::GetParentFrame() const { if (GetSafeHwnd() == NULL) // no Window attached return NULL; ASSERT_VALID(this); CWnd* pParentWnd = GetParent(); // start with one parent up while (pParentWnd != NULL) { if (pParentWnd->IsFrameWnd()) return (CFrameWnd*)pParentWnd; pParentWnd = pParentWnd->GetParent(); } return NULL; } |
正在阅读:VC++学习:分析MFC中的映射VC++学习:分析MFC中的映射
2004-02-14 09:34
出处:PConline
责任编辑:linjixiong
键盘也能翻页,试试“← →”键