`
hcmfys
  • 浏览: 356374 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

CListCtrl

 
阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->

VC 中使用控件一直是件让我头痛的事件,从控件的创建到控件的操作管理,都得写一大堆代码,相比于 Delphi/VB ,实在是麻烦多了。其实在之前学习 SDK 的时候,就有想过专门花点儿时间来学习 VC 中控件的使用,但一直没空。最近准备写一个小工具,要用到 ListCtrl 控件,所以又不得不好好的恶补 一翻。

我是在 MFC 的对话框模式下使用 CListCtrl 控件的,其实不管在 SDK 或文档 / 视图模式下, VC 控件的使用都差不多,下面来好好的写写 CListCtrl 控件的使用笔记。

一、 CListCtrl 控件的创建

由于我是在 MFC 的对话框模式下使用 CListCtrl 控件的,所以只需要在控件栏上选择 CListCtrl 的图形按钮,接着添加到对话框中就行了。

二、 CListCtrl 控件样式的设置

第一步:在使用 CListCtrl 控件之前,首先需要为该控件关联一个变量(只针对于对话框模式):
CListCtrl m_BlogAccountList;

第二步:由于 CListCtrl 控件要做一些初始化操作,比如设置控件样式,设置控件的行列并填入一些数据。初始化操作的代码是在对话框的 OnInitDialog 事件中写入的。

默认情况下, CListCtrl 控件的样式是非常简陋的,大多情况下我们都需要对 CListCtrl 控件的样式进行修改,比如设置为报表样式,可以进行整行 选择等,如有需要还有调整 CListCtrl 控件的行高。诸如这些设置都需要用到 CListCtrl 控件的扩展样式,所以首先得了解这些扩展样式。

我在 MSDN 中没有找到 CListCtrl 控件的扩展样式资料,只好上百度百科找了找。

CListCtrl
控件的扩展样式
LVS_EX_GRIDLINES // 绘制表格线
LVS_EX_SUBITEMIMAGES//
子项目图标列表
LVS_EX_CHECKBOXES //
带复选框
LVS_EX_TRACKSELECT //
自动换行
LVS_EX_HEADERDRAGDROP//
报表头可以拖拽
LVS_EX_FULLROWSELECT //
选择整行
LVS_EX_ONECLICKACTIVATE//
单击激活
LVS_EX_TWOCLICKACTIVATE//
双击激活
LVS_EX_FLATSB//
扁平滚动条
LVS_EX_REGIONAL
LVS_EX_INFOTIP
LVS_EX_UNDERLINEHOT
LVS_EX_UNDERLINECOLD
LVS_EX_MULTIWORKAREAS//
多工作区

对话框模式下创建的 CListCtrl 控件样式只有一个,就是 WS_BORDER ,而我需要为 CListCtrl 设置为报表样式,并能选择整行,下面就可以开始写代码了:

//
通过 GetWindowLong 来获取 CListCtrl 已有的样式
DWORD dwStyle = GetWindowLong(m_BlogAccountList.m_hWnd, GWL_STYLE);

//
在原有样式的基本上,添加 LVS_REPORT 扩展样式
SetWindowLong(m_BlogAccountList.m_hWnd, GWL_STYLE, dwStyle|LVS_REPORT);



//
获取已有的扩展样式
DWORD dwStyles = m_BlogAccountList.GetExStyle();

//
取消复选框样式
dwStyles &= ~LVS_EX_CHECKBOXES;

//
添加整行选择和表格线扩展样式
m_BlogAccountList.SetExtendedStyle(dwStyles|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

通过以上四句代码,就已经能满足我的需求了。

三、为 CListCtrl 控件添加列

列的添加只需要用到 LVCOLUMN 结构体,所以需要先行了解了解。在 MSDN 中查到的 LVCOLUMN 结构体的定义如下:

typedef struct _LVCOLUMN {
UINT mask;
int fmt;
int cx;
LPTSTR pszText;
int cchTextMax;
int iSubItem;
#if (_WIN32_IE >= 0x0300)
int iImage;
int iOrder;
#endif
} LVCOLUMN, FAR *LPLVCOLUMN;

该结构体共有 8 个成员。

mask
是用来设置 LVCOLUMN 结构体中哪些成员有效,其值可以为 0 mask 可设置的值如下:

LVCF_FMT fmt
成员有效
LVCF_IMAGE iImage
成员有效
LVCF_ORDER //
以下略
LVCF_SUBITEM
LVCF_TEXT
LVCF_WIDTH

fmt
成员是对 CListCtrl 控件列标题进行设置,比如列标题中文字的对齐方式,是否在列标题中显示图标等。

cx
成员是设置列宽。

pszText
成员是设置列标题文字

cchTextMax
成员是设置标题文字的缓冲区大小

iSubItem
成员是设置列索引

iImage
成员是设置 ImageList 中的图像索引。

iOrder
成员的作用未知。

下面进行添加列操作:

char *szColUmn[] = {"
帐号 ", " 密码 "};
int nColWidth[] = {100, 100};
LVCOLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;
lvc.fmt = LVCFMT_LEFT; //
左对齐
for (int i = 0; i < 2; i++)
{
lvc.pszText = szColUmn[i];
lvc.iSubItem = i;
lvc.iOrder = i;
lvc.cx = nColWidth[i];
m_BlogAccountList.InsertColumn(i, &lvc);

}

四、为 CListCtrl 控件添加行
添加行的操作需要用到 InsertItem SetItemText 属性,这个简单,就不详述了,看代码:

m_BlogAccountList.InsertItem(0, "abc");
m_BlogAccountList.SetItemText(0, 1, "abc");
m_BlogAccountList.SetItemText(1, 1, "123");

该函数获得有关指定窗口的信息,
函数也获得在额外窗口内存中指定偏移地址的 32 位长整型值。
LONG GetWindowLong(HWND hWnd,int nindex);
hwnd:
窗口句柄及间接给出的窗口所属的窗口类。

函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的 32 位度整型值。

函数原型: LONG GetWindowLong HWND hWnd int nlndex );

参数:

hWnd:
窗口句柄及间接给出的窗口所属的窗口类。

nlndex
:指定要获得值的大于等于 0 的值的偏移量。有效值的范围从 0 到额外窗口内存空间的字节数一 4 例如,若指定了 12 位或多于 12 位的额外类存储空间,则应设为第三个 32 位整数的索引位 8 。要获得任意其他值,指定下列值之一:

GWL_EXSTYLE
;获得扩展窗日风格。

GWL_STYLE
:获得窗口风格。

GWL_WNDPROC
:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用 GWL_WNDPROC 函数调用窗口过程。

GWL_HINSTANCE
:获得应用事例的句柄。

GWL_HWNDPAAENT
:如果父窗口存在,获得父窗口句柄。

GWL_ID:
获得窗口标识。

GWL_USERDATA
:获得与窗口有关的 32 位值。每一个窗口均有一个由创建该窗口的应用程序使用的 32 位值。

hWnd 参数标识了一个对话框时也可用下列值:

DWL_DLGPROC
:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数 CallWindowProc 来调用对话框过程。

DWL_MSGRESULT
:获得在对话框过程中一个消息处理的返回值。

DWL_USER
:获得应用程序私有的额外信息,例如一个句柄或指针。

返回值:如果函数成功,返回值是所需的 32 位值;如果函数失败,返回值是 0 。若想获得更多错误信息请调用 GetLastError 函数。

备注:通过使用函数 RegisterClassEx 将结构 WNDCLASSEX 中的 cbWndExtra 单元指定为一个非 0 值来保留额外类的存储空间。

分享到:
评论

相关推荐

    扩展的CListCtrl_编辑框_下拉框_CListCtrl_MFC_

    在MFC(Microsoft Foundation Class)库中,CListCtrl是一个非常重要的控件,它用于创建类似于Windows资源管理器中的列表视图。这个控件允许程序员显示多列数据,并且可以支持各种视图样式,如图标、列表、小图标和...

    CListCtrl控件背景颜色网格色彩

    CListCtrl控件背景颜色网格色彩,用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何...

    CListCtrl实现icon显示示例

    在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库提供的一种控件,用于创建类似Windows资源管理器的列表视图。本示例主要介绍如何使用CListCtrl控件来显示图标,使得应用程序界面更加直观和友好...

    CListCtrl中列表显示任意图片

    在Windows编程中,MFC(Microsoft Foundation Classes)库提供了一个强大的控件——CListCtrl,用于创建类似Windows资源管理器的列表视图。这个控件允许开发者显示多种数据类型,包括文本和图像。本篇文章将深入探讨...

    CListCtrl 改变选中行的颜色

    在Windows编程中,`CListCtrl` 是MFC(Microsoft Foundation Classes)库提供的一种控件,用于显示列表项,它可以实现类似Windows资源管理器中左边列表视图的效果。本话题将详细探讨如何在`CListCtrl`中实现改变选中...

    CListCtrl控件实现Item项拖拽效果

    在Windows编程中,MFC(Microsoft Foundation Classes)库为我们提供了许多方便的控件来构建用户界面,其中之一就是CListCtrl。CListCtrl控件通常用于显示列表形式的数据,包括图标、文本等。在这个主题中,我们将...

    选中CListCtrl中的单元格

    在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库中用于创建类似Windows资源管理器风格的列表视图控件的一个类。通常,当我们点击CListCtrl中的某一行时,整个行会被选中。然而,有时我们可能...

    CListCtrl控件添加 ChekcBox复选框

    在Windows编程中,MFC(Microsoft Foundation Classes)库为我们提供了许多方便的控件来构建用户界面,其中之一就是CListCtrl。CListCtrl控件通常用于显示列表形式的数据,包括文本、图像等。在这个主题中,我们将...

    实现MFC CListCtrl控件的可编辑功能

    在Windows编程领域,MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows API的使用,其中CListCtrl是MFC为开发者提供的一个列表视图控件。通常,CListCtrl控件主要用于展示多列数据,但它...

    CListCtrl 打印列表 CListCtrl打印、CListCtrl导出到Excel、列表控件

    根据给定文件的信息,本文将围绕CListCtrl控件的操作展开,主要介绍如何利用CListCtrl进行打印操作、导出数据至Excel以及列表控件的基本使用。这些功能都是基于Visual Studio 2008实现的,并且可以直接调用。 ### ...

    MFC的CListCtrl列表颜色变化

    在Microsoft Foundation Classes (MFC)库中,CListCtrl是一个非常重要的控件,它用于创建类似于Windows资源管理器中的列表视图。这个控件允许程序员显示多列数据,并且可以进行排序、选择和编辑等操作。在实际开发中...

    MFC CListCtrl重绘,功能全

    在Windows应用程序开发中,Microsoft Foundation Class (MFC)库提供了一组封装的Windows API控件,其中CListCtrl是用于创建列表视图控件的类。CListCtrl提供了丰富的功能,如显示列、行数据,支持多种视图样式,以及...

    CListCtrl 标题栏颜色字体修改

    在Windows编程中,`CListCtrl` 是MFC(Microsoft Foundation Classes)库提供的一种控件,用于创建类似于Windows资源管理器中的列表视图。当你需要自定义`CListCtrl`的外观,比如改变标题栏的颜色和字体时,这通常...

    ClistCtrl控件实现icon和report两种带图标的列表显示模式

    本篇主要探讨的是如何利用MFC中的CListCtrl控件来实现图标(Icon)和报告(Report)两种带图标的列表显示模式。 CListCtrl是MFC提供的一个视图类,用于创建类似Windows资源管理器的列表视图。它可以显示文本、图标...

    CListCtrl 添加编辑框,下拉列表框,时间控件

    在Windows编程中,MFC(Microsoft Foundation Classes)库为我们提供了许多便利,其中之一就是CListCtrl类,它用于创建类似于Windows资源管理器中的列表视图。本篇将详细讲解如何在CListCtrl中添加编辑框、下拉列表...

    设置CListCtrl单元格颜色和背景色VC++6.0

    在VC++6.0开发环境中,使用MFC(Microsoft Foundation Classes)库时,我们经常会遇到需要自定义控件样式的情况,比如改变CListCtrl控件的单元格颜色和背景色。CListCtrl是MFC中用于创建类似Windows资源管理器列表...

    VC++ CListCtrl 控件 行高设置

    在VC++编程环境中,CListCtrl控件是一个非常常用的组件,用于显示列表形式的数据。它提供了类似Windows资源管理器中的列表视图功能。在实际应用中,有时我们需要自定义行高以适应不同的显示需求,例如增强可读性或...

    MFC实现CListCtrl创建,CListCtrl双击可编辑,Dialog标题栏隐藏功能

    在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架中实现CListCtrl控件的创建,以及如何在双击时使列表项变为可编辑。同时,我们还将介绍如何隐藏Dialog的标题栏,以提供更为简洁的用户界面...

    CListCtrl的使用方法

    CListCtrl是MFC(Microsoft Foundation Classes)库中一个非常重要的控件,它用于创建类似Windows资源管理器或Outlook风格的列表视图。在Windows应用程序开发中,它提供了显示和操作多列数据的能力,每行可以包含多...

    CListCtrl 完全重绘(包括表头,表项和滚动条,带checkbox)

    在Windows编程中,`CListCtrl`是MFC(Microsoft Foundation Classes)库提供的一种用于创建列表视图控件的类。这个控件常用于显示带有列标题的数据项列表,可以包含文本、图标或者两者都有。在某些场景下,开发者...

Global site tag (gtag.js) - Google Analytics