简介
从一个MFC背景的到来,我还以为它是关于时间,我开始一个新的科技之旅后,学习如何开发看中。NET应用程序,并与我的新发现在C#中的知识打动每个人。时髦的新平台上,因为我已经作出了很大的进展,从CLR的内部学习C#语言的语法。不过,我有一个小的琐碎的问题不会消失。这不我兴奋。它为什么不兴奋,我是百思不得其解,因为每个人,我发言,我读的几乎一切似乎认为最好的东西NET框架,因为有人节省每个人都懒得自己的面包切片的好主意 - 也许这是一个控制的事情,也许我需要"放手"。
无论如何,这漫无边际的真正属于在另一篇文章,但是,它作为一个很好的介绍如何来到我发现WTL的服务,为什么我不能似乎在世界上的C习惯踢赞成名利就是的。NET。顺便说一下,我也应该指出,我爱彗星,和WTL我兴奋。背景
虽然学习使用WTL的,我决定,我写了前一阵子,我将开始移植清单控制使用MFC和改善一路上。这篇文章是我努力的成果 - 又一列表控制,支持多种功能,但毫无疑问并不完全尽一切你要找的。但是,在这其中的乐趣!特点
Vista风格的项目选择。主题或经典的UI支持。项目或子项目的选择。子项目编辑,组合框,日期/时间。超链接"复选框(正常和三态)和进度条(主题和固体)。标题列拖放重新排序。内置支持列排序。Groovy中寻找alpha混合组选择框。双缓冲无闪烁绘图(带有WTL的)。平滑滚动(减速)。Titletips(不要混淆工具提示,但支持)。一切看起来快活尼斯(不是一个真正的功能,但我想我会提到)。嵌入式数据结构或类的支持(稍后我将谈及这)。压倒一切的数据源(我后来也将谈及这)。其他
你可能有兴趣知道,我也有一个树控件,致意的绘画风格,在CListCtrl的使用。如何使用CListCtrl的
首先,我认为这将是一个好主意,解释子项目和列的格式/标志,可用于控制如何在列表控件中显示和编辑文本。可设置的项目,格式列级,这意味着根据该列中的所有子项相同的格式,或在一个单独的子项目级别,将覆盖列的格式。列/子项目格式的一个例子,可以发现其中的"第5列"列级格式的ITEM_FORMAT_PROGRESS演示,但它的个别子项目,以证明其他格式覆盖。
我鼓励你发挥演示;然而,这被CodeProject上,我猜你可能已经这样做。对于那些想更多的细节,这里是让你去使用通用的CListCtrl所需的基本函数:void SetImageList( CImageListamp; ilItemImages)说明:
分配一个列表控制项的图像列表。参数:ilItemImages - 参考图像列表。无效AddColumn( CListColumnamp; listColumn)无效AddColumn( LPCTSTR lpszText,
; INT nWidth = 0, INT nImage = ITEM_IMAGE_NONE
布尔bFixed = FALSE UINT nFormat = ITEM_FORMAT_NONE UINT nFlags = ITEM_FLAGS_NONE)说明:
添加一个列的列表控件。参数:listColumn - 参考结构描述列详细。lpszText - 列标题标题字符串。nWidth - 列的宽度,以像素为单位。nImage - 指数的ImageList显示在列标题。bFixed - 固定列宽的真实。nFormat - 描述列中的所有子项的格式:ITEM_FORMAT_NONE - 默认的,只读的子项目。ITEM_FORMAT_EDIT - 编辑子项目。ITEM_FORMAT_DATETIME - 日期/时间子项目。ITEM_FORMAT_COMBO - 组合框子项目。ITEM_FORMAT_CHECKBOX - 2个状态复选框子项目。ITEM_FORMAT_CHECKBOX_3STATE - 3个状态复选框子项目。ITEM_FORMAT_HYPERLINK - 超链接(点击)的子项目。ITEM_FORMAT_PROGRESS - 进度指标子项目。ITEM_FORMAT_CUSTOM - 自定义子项目。nFlags - 位掩码描述列的格式类型:ITEM_FLAGS_NONE - 无格式的标志(默认)。ITEM_FLAGS_LEFT - 左对齐列标题和子项的文本。ITEM_FLAGS_RIGHT - 右对齐列标题和子项的文本。ITEM_FLAGS_CENTRE - 中心列标题和子项的文本。ITEM_FLAGS_READ_ONLY - 列的子项是只读的(ITEM_FORMAT_CHECKBOX [_3STATE]或ITEM_FORMAT_DATETIME有用的)。ITEM_FLAGS_EDIT_UPPER - 编辑文本是被迫为大写(ITEM_FORMAT_EDIT或ITEM_FORMAT_COMBO ITEM_FLAGS_COMBO_EDIT)。ITEM_FLAGS_EDIT_NUMBER - 编辑文本数值(ITEM_FORMAT_EDIT或ITEM_FORMAT_COMBO ITEM_FLAGS_COMBO_EDIT)。ITEM_FLAGS_EDIT_FLOAT - 编辑文本浮点(ITEM_FORMAT_EDIT或ITEM_FORMAT_COMBO ITEM_FLAGS_COMBO_EDIT)。ITEM_FLAGS_EDIT_NEGATIVE - 编辑文本允许负数(ITEM_FLAGS_EDIT_NUMBER或ITEM_FLAGS_EDIT_FLOAT)。ITEM_FLAGS_EDIT_OPERATOR - 数字文本之前,可以先通过"GT;","<="等(ITEM_FLAGS_EDIT_NUMBER或ITEM_FLAGS_EDIT_FLOAT)。ITEM_FLAGS_COMBO_EDIT - 组合框包含编辑控件(ITEM_FORMAT_COMBO)。ITEM_FLAGS_DATE_ONLY - 只有日期显示或编辑(ITEM_FORMAT_DATETIME)。ITEM_FLAGS_TIME_ONLY - 只有时间显示或编辑(ITEM_FORMAT_DATETIME)。ITEM_FLAGS_DATETIME_NONE - 允许在日期/时间日期选择器(ITEM_FORMAT_DATETIME)"无"。ITEM_FLAGS_PROGRESS_SOLID - 进度条绘制在扎实的作风(ITEM_FORMAT_PROGRESS)。 INT的AddItem(
60;CListItemlt; TData GT;放大器; LISTITEM)INT的AddItem(
;LPCTSTR lpszText, INT nImage = ITEM_IMAGE_NONE
160; UINT nFormat = ITEM_FORMAT_NONE UINT nFlags = ITEM_FLAGS_NONE)说明:
添加项目到列表控件。参数:LISTITEM - 参考结构描述了所有项目的详细信息。lpszText - 第一子项的文字。nImage - 指数的ImageList显示在第一个子项目(见SetImageList)。nFormat - 描述了第一个子项目的格式(见说明AddColumn)。nFlags - 位掩码,它描述的子项的格式类型(见说明AddColumn)。布尔SetItemText(
; INT nItem, INT nSubItem, LPCTSTR lpszText说明:
设置子项的文字。参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。lpszText - 子项的文字。布尔SetItemDate( INT nItem, INT nSubItem,
0; SYSTEMTIMEamp; stItemDate)说明:
设置子项的日期(ITEM_FORMAT_DATETIME子项目)。参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。stItemDate - 参考SYSTEMTIME结构。布尔SetItemComboIndex( INT nItem,
60; INT nSubItem, INT参数nIndex)说明:
设置子项目ComboBox项选择(ITEM_FORMAT_COMBO子项目)。参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。参数nIndex - 指数组合框列表设置。布尔SetItemCheck( INT nItem, INT nSubItem, INT nCheckValue)说明:
设置子项的复选框的状态(ITEM_FORMAT_CHECKBOX和ITEM_FORMAT_CHECKBOX_3STATE子项目)。参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。nCheckValue - 代表复选框的状态:0 - 未检查的(或三态未定义)。1 - 检查(或"嘀"三态)。-1 - "跨"三态(2状态复选框不适用)。布尔SetItemImage( INT nItem, &
#160;INT nSubItem, INT nImage)说明:
设置子项目的形象。
参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。nImage - 指数的ImageList显示在子项目(见SetImageList)。布尔SetItemFormat( INT nItem, INT nSubItem, UINT nFormat UINT nFlags = ITEM_FLAGS_NONE)布尔SetItemFormat( INT nItem,
INT nSubItem, UINT nFormat UINT nFlags,
160; CListArray LT; CString的GT;放大器; aComboList)说明:
设置子项的格式(覆盖列的格式)。参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。nFormat - 描述子项的格式(见说明AddColumn)。nFlags - 位掩码,它描述的子项的格式类型(见说明AddColumn)。CListArray LT; CString的GT;放大器; aComboList - 用于填充组合框(ITEM_FORMAT_COMBO)的字符串。布尔SetItemFont( &
#160; INT nItem, INT nSubItem, HFONT HFONT)说明:
子项的字体设置(覆盖标准字体)。参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。HFONT - GDI的字体句柄。布尔SetItemColours( INT nItem,
160; INT nSubItem, COLORREF rgbBackground &
#160;COLORREF rgbText)说明:
设置子项目的背景和文本颜色(标准颜色覆盖)。参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。rgbBackground - 子项目背景的RGB值。rgbText - 子项文本的RGB值。无效ShowThemed( &
#160;布尔bShowThemed = TRUE,)说明:
覆盖默认的头和选择绘图(适用于XP)。参数:bShowThemed - TRUE =画为主题的头和选择; FALSE,=经典模式。无效SetSmoothScroll(
0;布尔bSmoothScroll = TRUE,)说明:
平滑滚动列表时,传呼或行滚动。参数:bSmoothScroll - TRUE = FALSE,平滑滚动; =正常滚动。无效SetBackgroundImage( HBITMAP hBackgroundImage 布尔bTileImage = FALSE)说明:
设置背景位图图像。参数:hBackgroundImage - 处理位图设置为背景。bTileImage - TRUE =平铺图像;假 - 绘制图像居中。无效ShowHeader( 布尔bShowHeader = TRUE,)说明:
显示或隐藏列表标题。参数:bShowHeader - TRUE =显示列表头; FALSE =隐藏列表头。无效ShowHeaderSort( 布尔bShowSort = TRUE,)
说明:
(头)显示排序箭头和支持列排序。参数:bShowSort - TRUE =支持列排序; FALSE,=隐藏排序箭头。无效SetSingleSelect( 布尔bSingleSelect = TRUE,)说明:
只允许一个选择(禁用多个和集团选择)。参数:bSingleSelect - 真=单个项目的选择只有返回FALSE =支持多组选择。无效SetFocusSubItem( 布尔bFocusSubItem = TRUE,)说明:
支持子项目的重点或整个项目的选择。参数:bFocusSubItem - TRUE =支持子项目的重点; FALSE =整个项目的重点。如何使用CListCtrlDatalt;类TData GT;
CListCtrl的支持SetItemData和GetItemData;这些设置和检索DWORD值,从列表中可以使用任何你喜欢的项目。但是,您可能会发现更多有用的整合,直接到控制你的数据结构或类(或嵌入)。对于这一点,你需要的模板类的CListCtrlData(一个这样的例子可以发现在演示应用)。以下功能可用于访问这个数据:BOOL SetItemData( INT nItem, TDataamp; tData)说明:
分配到一个项目的数据。参数:nItem - 指数项(零指数)。tData - 数据结构或类(模板类的声明中定义的类型)的引用。布尔GetItemData( INT nItem, TDataamp; tData)说明:
从项目中获取数据。参数:nItem - 指数项(零指数)。tData - 数据结构或类(模板类的声明中定义的类型)的引用。如何使用CListImpl
有时候,这是不太够使用的通用控制。您可能希望:添加新的功能控制,自定义绘图,或以上列表中的数据源,采取总量控制。
由于存在的明确分开的接口,并在数据源设计CListImpl内置,您可以简单地派生一个类,并覆盖了数据的存取功能,从而采取的数据源的总所有权包括如何的数据是存储和访问。在演示中,你会发现CListUserData - 这个类存储CUserProfiles(例如类)各自为阵,并返回相关的文字或图像GetItemText和GetItemImage。在派生类中所需的唯一强制性功能:INT GetItemCount()说明:
返回的数据source.CString GetItemText的项目数( INT nItem, INT nSubItem)说明:
返回的子项的文字。参数:nItem - 指数项(零指数)。nSubItem - 指数子项(零指数)。历史1.0 - (2006年3月10日)首次发行。1.1 - (2006年3月13日)VS2005的小错误修复 - 感谢chengang。1.2 - 2006年3月(17)更正下VS2005的编译时"访问冲突",并补充ShowThemed。1.3 - (2006年3月27日)增加了自动滚动时集团选择 - 建议,Slaham表示感谢。1.4 - 2006年4月(第5)增加了平滑滚动(SetSmoothScroll)和固定的Windows 2000的问题 - 感谢ihanz123。1.5 - (2006年4月10日)增加背景图片的支持和SetItemComboIndex - 感谢您的建议,MyRock。最后
为妙此列表控制,我怕我不能把所有的功劳,因为它利用来自所有来源的方式,包括在CodeProject上发布的文章囊括的各种代码。正如您可能期望,想法和代码段都被偷走了,无情地扭到这个项目,并在这个过程中,通过我的编码风格。任何人承认他们的工作和尚未计入(给我发电子邮件,我将修改我的确认),但下面的道歉,我给指向正确的方向我表示感谢。致谢。。| AlanW