关于LPSTR_TEXTCALLBACK宏的机制
来源:互联网 发布:华为云计算 编辑:程序博客网 时间:2024/05/16 06:22
LPSTR_TEXTCALLBACK 是如何请求字符串的?
这是列表控件的一种机制,如果把一个Item(或subITem)的文字设置为LPSTR_TEXTCALLBACK,当列表控件需要显示这个文字时会向其父控件发LVN_GETDISPINFO消息,父控件必须响应这个消息并返回要显示的文字。
你可以在MSDN中输入LVN_GETDISPINFO查看详细的说明。
这就是虚拟化CListCtrl的一种应用:
http://www.codeproject.com/KB/combobox/virtuallist.ASPx
http://msdn2.microsoft.com/en-us/library/ye4z8x58(VS.80).ASPx
在资源编辑器中选好了ListCtrl的owner data选项,代码中设置好了列,之后调用SetITemCount(1000);触发重画。 1000是你实际的数据行数。行数据可以根据当前显示的位置来重画。例如有1000行数据,但实际上用户可以看到的假设是10列(每屏幕显示10行),响应相应LVN_GETDISPINFO消息,我们就可以只重画1~10行,这样就大大节省了资源,不需要每次都重画CListCtrl中的所有1000行数据。这样效率得到明显的提高。
关于动态提供结点所显示的字符:首先你在项时需要指明lpszITem参数为: LPSTR_TEXTCALLBACK。在控件显示该结点时会通过发送TVN_GETDISPINFO来取得所需要的字符,在处理该消息时先将参数pNMHDR转换为LPNMLVDISPINFO,然后填充其中item.pszText。通过item中的iItem,iSubITem可以知道当前显示的为那一项。下面的代码演示了这种方法:
char szOut[8][3]={"No.1","No.2","No.3"};
//添加结点
m_list.InsertITem(LPSTR_TEXTCALLBACK,)
m_list.InsertITem(LPSTR_TEXTCALLBACK,)
//处理消息
void CParentWnd::OnGetDispInfoList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;
pLVDI->item.pszText=szOut[pTVDI->item.iItem];//通过iITem得到需要显示的字符在数组中的位置
*pResult = 0;
}
- 关于LPSTR_TEXTCALLBACK宏的机制
- 关于Solaris的syslog机制
- 关于Hibernate的lazy机制
- 关于升级机制的问题
- 关于消息机制的介绍
- 关于Ajax的异步机制
- 关于Chrome的安全机制
- 关于PureMVC的notification机制
- 关于Solaris的syslog机制
- 关于JAVA的Reflection机制
- 关于委托机制的理解
- 关于Struts的令牌机制
- 关于view的事件机制
- 关于ValidatorEnable的工作机制
- 关于事件的传递机制。
- 关于 Spring 的 Aware 机制
- 关于handler机制的总结
- 关于MyBatis的缓存机制
- 旁注资料最终版
- FMIS Feature Explorer 发布了
- XSS测试语句大全
- 编程时圆周率的精确取值
- 大学两年总结
- 关于LPSTR_TEXTCALLBACK宏的机制
- 中国剩余定理
- 金猪pro
- 金猪pro评测
- servu.aspx
- 李亚鹏打记者
- 偷车美女
- 男孩向前冲
- 一枝梅20