<!-- [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
值来保留额外类的存储空间。
|
分享到:
相关推荐
在MFC(Microsoft Foundation Class)库中,CListCtrl是一个非常重要的控件,它用于创建类似于Windows资源管理器中的列表视图。这个控件允许程序员显示多列数据,并且可以支持各种视图样式,如图标、列表、小图标和...
CListCtrl控件背景颜色网格色彩,用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何...
在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库提供的一种控件,用于创建类似Windows资源管理器的列表视图。本示例主要介绍如何使用CListCtrl控件来显示图标,使得应用程序界面更加直观和友好...
在Windows编程中,MFC(Microsoft Foundation Classes)库提供了一个强大的控件——CListCtrl,用于创建类似Windows资源管理器的列表视图。这个控件允许开发者显示多种数据类型,包括文本和图像。本篇文章将深入探讨...
在Windows编程中,`CListCtrl` 是MFC(Microsoft Foundation Classes)库提供的一种控件,用于显示列表项,它可以实现类似Windows资源管理器中左边列表视图的效果。本话题将详细探讨如何在`CListCtrl`中实现改变选中...
在Windows编程中,MFC(Microsoft Foundation Classes)库为我们提供了许多方便的控件来构建用户界面,其中之一就是CListCtrl。CListCtrl控件通常用于显示列表形式的数据,包括图标、文本等。在这个主题中,我们将...
在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库中用于创建类似Windows资源管理器风格的列表视图控件的一个类。通常,当我们点击CListCtrl中的某一行时,整个行会被选中。然而,有时我们可能...
在Windows编程中,MFC(Microsoft Foundation Classes)库为我们提供了许多方便的控件来构建用户界面,其中之一就是CListCtrl。CListCtrl控件通常用于显示列表形式的数据,包括文本、图像等。在这个主题中,我们将...
在Windows编程领域,MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows API的使用,其中CListCtrl是MFC为开发者提供的一个列表视图控件。通常,CListCtrl控件主要用于展示多列数据,但它...
根据给定文件的信息,本文将围绕CListCtrl控件的操作展开,主要介绍如何利用CListCtrl进行打印操作、导出数据至Excel以及列表控件的基本使用。这些功能都是基于Visual Studio 2008实现的,并且可以直接调用。 ### ...
在Microsoft Foundation Classes (MFC)库中,CListCtrl是一个非常重要的控件,它用于创建类似于Windows资源管理器中的列表视图。这个控件允许程序员显示多列数据,并且可以进行排序、选择和编辑等操作。在实际开发中...
在Windows应用程序开发中,Microsoft Foundation Class (MFC)库提供了一组封装的Windows API控件,其中CListCtrl是用于创建列表视图控件的类。CListCtrl提供了丰富的功能,如显示列、行数据,支持多种视图样式,以及...
在Windows编程中,`CListCtrl` 是MFC(Microsoft Foundation Classes)库提供的一种控件,用于创建类似于Windows资源管理器中的列表视图。当你需要自定义`CListCtrl`的外观,比如改变标题栏的颜色和字体时,这通常...
本篇主要探讨的是如何利用MFC中的CListCtrl控件来实现图标(Icon)和报告(Report)两种带图标的列表显示模式。 CListCtrl是MFC提供的一个视图类,用于创建类似Windows资源管理器的列表视图。它可以显示文本、图标...
在Windows编程中,MFC(Microsoft Foundation Classes)库为我们提供了许多便利,其中之一就是CListCtrl类,它用于创建类似于Windows资源管理器中的列表视图。本篇将详细讲解如何在CListCtrl中添加编辑框、下拉列表...
在VC++6.0开发环境中,使用MFC(Microsoft Foundation Classes)库时,我们经常会遇到需要自定义控件样式的情况,比如改变CListCtrl控件的单元格颜色和背景色。CListCtrl是MFC中用于创建类似Windows资源管理器列表...
在VC++编程环境中,CListCtrl控件是一个非常常用的组件,用于显示列表形式的数据。它提供了类似Windows资源管理器中的列表视图功能。在实际应用中,有时我们需要自定义行高以适应不同的显示需求,例如增强可读性或...
在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架中实现CListCtrl控件的创建,以及如何在双击时使列表项变为可编辑。同时,我们还将介绍如何隐藏Dialog的标题栏,以提供更为简洁的用户界面...
CListCtrl是MFC(Microsoft Foundation Classes)库中一个非常重要的控件,它用于创建类似Windows资源管理器或Outlook风格的列表视图。在Windows应用程序开发中,它提供了显示和操作多列数据的能力,每行可以包含多...
在Windows编程中,`CListCtrl`是MFC(Microsoft Foundation Classes)库提供的一种用于创建列表视图控件的类。这个控件常用于显示带有列标题的数据项列表,可以包含文本、图标或者两者都有。在某些场景下,开发者...