<!-- [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来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何...
MFC控件CListCtrl虚拟列表的使用实例,只要你内存够大百万级、千万级甚至更大的的数据显示都不会有问题,可随意流畅的拖动滚动条。 PS1:借鉴了网上找来的一份VC6.0实现的代码(此代码编译有错误),重新使用VS2019...
CDragListCtrl继承CListCtrl类,CDragListCtrl实现拖动时绘制该行的内容浮动在鼠标移动的位置。CDragList主要用于计算当前鼠标移动到那一行上。 使用CDragListCtrl的对话框添加 afx_msg LRESULT DragMoveItem(WPARAM...
在MFC的CListCtrl控件的单元格内增加编辑框,下拉框等
网上大部分ClistCtrl添加ComboBox控件都是在OnEditBegin函数中添加,我写的这个从一开始就一直将CComboBox控件静态显示在CListCtrl之上。将其他控件也可参考这段代码,比较简单易懂!
CListCtrl 代码 CListCtrl 代码 CListCtrl 代码 CListCtrl 代码
CListCtrl的主要事件及鼠标响应函数,CListCtrl的主要事件及鼠标响应函数
使用CListCtrl+CImageList显示任意图片 文章链接 http://blog.csdn.net/guoming0000/article/details/7303361
很简单明了的一个小例子,看完就能明白如何使用CListCtrl完成icon显示。
CListCtrl 实现重绘 改变选中行的颜色,
通过vs2008调试,所有功能均可直接调用。CListCtrl 打印列表 CListCtrl打印、CListCtrl导出到Excel、列表控件
继承自CListCtrl,可单独设置单元格颜色和背景色
MFC的CListCtrl空间默认不能编辑。但可通过在特定地方显示编辑框,并读写编辑框的内容来间接实现CListCtrl的可编辑功能。
实现CListCtrl控件的Item项拖拽效果,本源码对应的博客链接为:http://blog.csdn.net/d704791892/article/details/22600075
该资源主要是讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn、InsertItem、SetItemText向列表插入数据,CImageList插入BMP图片或ICON图标.是博客文章...
自绘CListCtrl(实现格子网状,去掉竖线)
CListCtrl设置不同行不同颜色,指定单元行和字体颜色,字体大小,行高行宽
关于MFC中ClistCtrl控件的使用,带图标的列表显示,有icon和report两种模式的例子