CListCtrl成员函数集(中文版)

合集下载

CListCtrl控件(2)可编辑单元格的CListCtrl控件

CListCtrl控件(2)可编辑单元格的CListCtrl控件

CListCtrl控件(2)可编辑单元格的CListCtrl控件CListCtrl控件⽣成之后,⽆论你单击还是双击它的单元格,都没有任何反应,如果我们需要像EXCEL那样双击⼀个单元格后即可编辑该单元格的内容,那怎么办呢?⼀个⽅法就是双击单元格之后,在该单元格的地⽅⽣成⼀个编辑框,然后让输⼊焦点落在该编辑框上,我们即可对该编辑框进⾏⽂字编辑,当输⼊焦点从编辑框上消失时(通常是⽤户在编辑框外的地⽅单击,就像EXCEL当编辑完⼀个单元格的内容后⽤户在单元格外的地⽅单击⼀下以⽰确认输⼊完毕⼀样。

),就理解为编辑完毕,然后把编辑框的内容设置为该单元格的内容,最后隐藏或销毁编辑框。

1.从CListCtrl类继承,新建⼀个⾃⼰的列表框类,在这⾥我取名为CPage2ListCtrl,下⾯就要在CPage2ListCtrl 类实现双击单元格编辑功能。

上⾯也已经说道,双击单元格后要显⽰⼀个编辑框,我们把那个编辑框看做是CPage2ListCtrl 类的成员。

接下来就要为这个编辑框新建⼀个从CEdit继承的类,为什么不直接⽤CEdit类呢,以后就知道为什么的了。

这个从CEdit继承的编辑框类我取名为CListEdit。

2.为CPage2ListCtrl类添加成员变量和函数:public:void DisposeEdit(); //这个函数的作⽤是.....往下看就知道的了。

CListEdit m_edit; //这个就是双击单元格后显⽰的编辑框。

int row,col; //⽤来记录双击的单元格是第⼏⾏第⼏列。

3.重写CPage2ListCtrl类的PreSubclassWindow()虚函数,这个函数的作⽤是什么,这⾥就不说了,我们要在这个函数⾥设置CPage2ListCtrl类的基本样式和扩展样式,还有创建m_edit成员变量的编辑框。

void CPage2ListCtrl::PreSubclassWindow(){// TODO: Add your specialized code here and/or call the base classModifyStyle(LVS_EDITLABELS,0);ModifyStyle(0,LVS_REPORT);ModifyStyle(0,LVS_SHOWSELALWAYS);SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);m_edit.Create(WS_CHILD|WS_CLIPSIBLINGS|WS_EX_TOOLWINDOW|WS_BORDER,CRect(0,40,10,50),this,1001);CListCtrl::PreSubclassWindow();}4.对CPage2ListCtrl类添加消息处理,对双击事件进⾏响应,消息名称是WM_LBUTTONDBLCLK。

CListCtrl用法

CListCtrl用法

CListCtrl用法一、CListCtrl在MFC中共有四种view可供选择,每种view用不同的方式显示列表的内容。

· 图标视图(Icon view)每一项以全尺寸图标(32×32像素)出现,下面有一个标签。

用户可在列表视图窗口拖动项到任意位置。

· 小图标视图(Small icon view)视图每一项以小图标(16×16像素)出现,右边有一个标签。

用户可在列表视图窗口拖动项到任意位置。

· 列表视图(List view)每一项以小图标出现,下面有一个标签。

项按列排列,不能拖动到列表视图窗口的任何位置。

· 报表视图(Report view)每一项在本行上出现,右边有排列成列的附加信息。

最左边的列包含小图标和标签,下一列包含应用指定的子项。

二、使用List Control控件有两种方法。

1.在对话框体上添加,直接从工具箱里点List Control拖拉即可,在属性里view项设置视图类型。

CListCtrl *pMyList;pMyList = (CListCtrl*)GetDlgItem(IDC_LIST);2.无对话框体,直接显示在程序初始视图窗口里面。

这时,如果基于CListView的类,声明变量,然后调用CListView类里的成员函数GetListCtrl()。

CListCtrl *pMyList;pMyList = &GetListCtrl();pMyList->ModifyStyle(0,LVS_ICON);//设置为视图类型三、其它设置。

如显示样式、位置、背景等。

设置显示样式:网格,选中时整行高亮pMyList->SetExtendedStyle( LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );如要固定每列不能用鼠标拖动,添加如下代码:CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)pMyList->GetHeaderCtrl();pHeaderCtrl->EnableWindow( FALSE ) ;四、之后可以插入行、列。

CListCtrl使用详解

CListCtrl使用详解

CListCtrl使用详解CListCtrl使用详解2009年04月07日星期二 10:56 P.M.1。

先来介绍REPORT类型的CListCtrl:首先使用下面的语句设置CListCtrl的style:DWORD SetExtendedStyle( DWORD dwNewStyle );其中LVS_EX_CHECKBOXES 表示添加CheckBoxLVS_EX_FULLROWSELECT 表示选择整行LVS_EX_GRIDLINES 表示添加表格线如果设置了LVS_EX_CHECKBOXES属性,则可以用BOOL GetCheck( int nItem ) const;来得到某一行是否Checked。

可以先用下面的语句来删除以前的东西:for(int k=2;k>=0;k--) //注意要从后往前删,否则出错m_ListCtrl.DeleteColumn(k);m_ListCtrl.DeleteAllItems();用下面的语句新建列:m_ListCtrl.InsertColumn(0,_T("文件名"),LVCFMT_IMAGE|LVCFMT_LEFT);m_ListCtrl.InsertColumn(1,_T("仪器类别"));m_ListCtrl.InsertColumn(2,_T("项目类别"));其中LVCFMT_IMAGE表示可以在第一列加入图标。

如果不要图标可以删去。

然后设置列宽:for(j=0;j<3;j++)m_ListCtrl.SetColumnWidth(j ,100);以下为列表加入图标,如果不需要图标,可以跳过这一步。

注意只在第一次加入,如果多次加入会出错!先在头文件中加入声明:CImageList m_ImageList;这是必要的,如果在cpp的某个函数中加入由于生命期结束,CImageList自动释放,则效果是列表中看不到图标,只看到一个白方块。

VC中CList用法及其成员的使用

VC中CList用法及其成员的使用

VC中CList用法及其成员的使用初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。

以下,就个人经历而言,告诉大家如何使用CListoCList是一个双向链表类。

1、头文件名不可少Clist类定义在Afxtempl. h头文件中,因此在使用该类时,需要加这个头文件名。

2、理解CList的声明和构造方法CList的声明如下:template< class TYPE, class ARG_TYPE >class CList : public CObject山此,我们知道CList是一个模版类,那么他的两个class是什么意思呢?下面看一个例子:CList<CString , CString&> list;//链表对象1CList<CString, CString> list2;//链表对象 2这里的第一个参数CString是实例化的类型,第二个参数是类的成员函数的参数的调用形式,通常是类型引用,当然也可以是对象,而不是引用。

对象和引用的区别,可以看一下C卄基础知识方面的书。

/////////////////////////////////////////////////////////////////////////////// MSDN:使用时要#include <afxtemp1. h>ConstructionCList Constructs an empty ordered list・建立一个链表example:CList<int, int> myList;//建立一个int 链表CList<CString, CString&> myList (16) ;//建立一个cstring 的链表,后面的16表示链表里面数据的个数,如果不写的话,可能是不限个数?CList<MYTYPE, MYTYPE&> myList;// 建立一个MYTYPE 类型(自定义)的链表如果不存入数据的话,刚建立的链表是空的,头尾都为空Head/Tail AccessGetHead Returns the head element of the list (cannot be empty)・返回链表的头数据例子:CList〈int,int> myList:for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) ; }〃存入数据int tmp=myList. GetHeadO ;//tmp 被赋予了0GetTail Returns the tail element of the list (cannot be empty)・返回链表的尾数据CLisnt,int> myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) ; }〃存入数据int tmp=myList. GetTail () ;//tmp 被赋予了9999OperationsRemoveHead Removes the element from the head of the list・移除链表头数据,链表数据个数减1,返回缩减前的头数据例子:CLis,int> myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) ; }〃存入数据int tmp二myList. RemoveHead() ://tmp被赋予了之询的头数据:0;同时数据个数变为9999;RemoveTail Removes the element from the tail of the list・移除链表尾数据,链表数据个数减1,返回缩减前的尾数据例子:CList<int, int> myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) : }〃存入数据int tmp=myList. RemoveTail () ;//tmp 被赋予了之前的尾数据:9999;同时数据个数变为9999;AddHead Adds an element (or all the elements in another list) to the head of the list (makes a new head).在链表头处插入新数据,链表数据个数加1,返回新的链表头位置(POSITION); 例子:CList<int, int〉myList;for (int i=0; i<10000; i++) { myList. AddTail (int (i)) ; }//存入数据POSITION pos=myList. AddHead(int (314)) ;//链表有了一个新的头数据:314; 同时链表个数变为10001 ;pos为新的头的位置;AddTail Adds an element (or all the elements in another list) to the tail of the list (makes a new tail).在链表尾处插入新数据,链表数据个数加1,返回新的链表尾位置(POSITION); 例子:POSITION pos=myList. AddTail (int (314)) ;//链表有了一个新的尾数据:314; 同时链表个数变为10001 ;pos为新的尾的位置;RemoveAll Removes all the elements from this list・清空链表,其头尾皆变成空指针;IterationGetHeadPosition Returns the position of the head element of the list.返回链表头的位置;CLisint> myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) ; }〃存入数据POSITION pos=myList. GetHeadPositionO ;//获得链表头的位置GetTailPosition Returns the position of the tail element of the list.返回链表尾的位置;CList<int, int> myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) ; }〃存入数据POSITION pos=myList. GetTailPosition() ;//获得链表尾的位置GetNext Gets the next element for iterating.返回当前位置的数据,之后,位置后移一位;CList<int, int> myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) : }〃存入数据POSITION pos=myList. GetHeadPositionO ;//获得链表头的位置int tmp二myList. GetNext (pos) ://tmp 被赋予了头数据的值:0;同时pos 指向第二个数据1;GetPrev Gets the previous element for iterating.返回当前位置的数据,之后,位置前移一位;CList<int, int〉myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) ; }〃存入数据POSITION pos=myList. GetTailPositionO ;//获得链表尾的位置int tmp二myList. GetNext (pos) ://tmp 被赋予了尾巴数据的值:9999;同时pos 指向倒数第二个数据9998;Retrieval/ModificationGetAt Gets the element at a given position.返回指定位置的数据;POSITION pos=myList. GetTailPositionO ;//获得链表尾的位置,还可以继续改变pos,以指向其他数据int tmp=myList. GetAt (pos) ://tmp 被赋予链表尾的数据SetAt Sets the element at a given position.CList<int, int〉myList;for (int i=0; i<10000; i++) { myList. AddTail (int (i)) ; }//存入数据POSITION pos二myList. GetTailPositionO ;//获得链表尾的位置,还可以继续改变pos,以指向其他数据myList. SetAt (pos, int (222)) ;//将链表尾部的数据赋成222RemoveAt Removes an element from this list, specified by position.清除指定位置处的数据;同时数据个数减1 ;CLisint> myList;for (int i=0; i<10000; i++) { myList. AddTail (int (i)) ; }〃存入数据POSITION pos=myList. GetTailPositionO ;//获得链表尾的位置myList. RemoveAt (pos) ;//链表pos (尾部)位置的数据被清除,数据个数变为9999; InsertionInsertBefore Inserts a new element before a given position.在指定位置前插入一个新数据,数据个数加1;CList<int, int> myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) ; }〃存入数据POSITION pos=myList. GetHeadPositionO ;//获得第一个数据的位置myList. InsertBefore (pos, int (123)) ;//在第一个数据前插入一个新数据:123,同时数据个数变为10001InsertAfter Inserts a new element after a given position.在指定位置后插入一个新数据,数据个数加1;CList<int, int> myList;for (int i=0; i< 10000; i++) { myList. AddTail (int (i)) ; }〃存入数据POSITION pos=myList. GetHeadPositionO ;//获得第一个数据的位置myList. InsertAfter (pos, int (123)) ;//在第一个数据后插入一个新数据:123, 同时数据个数变为10001SearchingFind Gets the position of an element specified by pointer value. 返回指定数据对应的位置;POSITION pos=myList. Find(int (0));〃获得0 (链表头)的位置Findindex Gets the position of an element specified by a zero-based index. 返回索引号对应的位置;POSITION pos=myList. Findindex(0) ;//0 表示链表头,以此类推Status GetCount Returns the number of elements in this list・返回链表的数据个数int num=myList. GetCount () ;//获得链表的数据个数IsEmpty Tests for the empty list condition (no elements)・判定链表是否为空;返回1表示链表是空,返回0表示链表非空;BOOL empty二myList・IsEmptyO ;。

MFCGridCtrl控件_使用说明(中英文)

MFCGridCtrl控件_使用说明(中英文)

3.2.2
初使化 GridCtrl 控件..........................................................................................25
3.2.3
设置固定行和列 .................................................................................................26
2.3.1 CGridCtrl 类...............................................................................................................3
2.3.2 CGridCellCheck 类 ....................................................................................................4
3.2.6
设置 ComboBox 列.............................................................................................29
3.2.7
设置行背景颜色和列背景颜色 .........................................................................30
图1 Grid 单元格可以是任何类型,这些类型都是从 CGridCell 派生下来的,基类中定义了 基本的数据存储和编辑操作。扩充的两个类 CgridCellCombo 和 CGridLCellCheck 示范了如 何创建自己的单元格类。

MFC总结之CListCtrl用法及技巧(二).

MFC总结之CListCtrl用法及技巧(二).

MFC总结之CListCtrl用法及技巧(二).续第一篇:MFC总结之CListCtrl用法及技巧(一)/zwgdft/article/details/7560592本篇重点介绍:禁止拖动表头、让第一列居中显示、设置行高与字体、虚拟列表技术、点击表头时进行归类、向上与向下移动、动态调整大小问题、避免闪烁问题。

6、禁止拖动表头重载OnNotify消息响应函数,屏蔽两个消息通知码:HDN_BEGINTRACKW 和HDN_DIVIDERDBLCLICKW。

示例如下:[cpp] view plaincopyprint?1.BOOL CXXXX::OnNotify(WPARAM wParam, LPARAM lPara m, LRESULT* pResult)2.{3.// TODO: Add your specialized code here and/or call the base class4.//屏蔽两个消息通知码,使得禁止拖动List表头5.NMHEADER* pNMHeader = (NMHEADER*)lParam;6.if(((pNMHeader->hdr.code == HDN_BEGINTRACKW) |7.(pNMHeader->hdr.code == HDN_DIVIDERDBLCLICKW)))8.{9.*pResult = TRUE;10.return TRUE;11.}12.13.return CDialog::OnNotify(wParam, lParam, pResult);14.}7、让第一列居中显示在插入列时,我们可以通过参数nFormat来设置文本居中显示,但是这种设置对于第一列是没有作用的。

这时我们可以考虑将我们的内容从第二列开始插入(设置为居中显示)。

先插入第一列,然后删除第一列,这样原先的第二列就充当了第一列。

8、设置行高和字体设置CListCtrl的行高没有函数接口,可以通过自绘来实现,但是比较麻烦。

CListCtrl用法

CListCtrl用法

CListCtrl控件的使用
在系统中,经常会用到ListCtrl来对数据进行显示,那么在系统中,对ListCtrl的使用主要是两个函数进行使用。

结合主界面对ListCtrl的用法进行一下介绍:
第一步,从控件列表栏里面,拖动一个ListCtrl在主界面上:
第二步,修改ListCtrl的样式
第三步,修改ListCtrl的资源ID
第四步,为ListCtrl绑定一个变量。

右键点击ListCtrl控件,然后选择“建立类向导”,
按下图进行设置
第五步,添加设置ListCtrl表头的函数。

在类视图中右键点击“CAMSDlg”类,然后选择“”,弹出“添加成员函数”界面,输入函数类型及函数描述,选择可见域为“Private”,如下图所示,并点击“确定”
第六步,在InitListCtrlStyle函数中添加如下代码,设置ListCtrl的列头及样式:
第七步,添加ListCtrl的绑定数据的函数RefreshListCtrlData()。

在函数里面做如下操作,首先获取ListCtrl的记录行数n,然后在第n行依次往各列插入数据。

代码如下:
运行程序,界面图如下:。

控件CListCtr详解

控件CListCtr详解

控件CListCtr详解1.CListCtrl控件CListCtrl控件在数据库编程中是用得比较多的控件之一,也是Window控件中较难掌握的一个控件。

他可以有四显示方式,Report、List、Icon、SmallIcon。

Report报告式列表视图方式在数据库开发中是最常用的一种方式。

在控件"properties"的Styles选项卡中在View 项可以选择Report方式。

Report方式中列表控件的显示方式是有行和列的,行又叫做Item,但有多列是我们只能操作每一行的第零列,也就是最前列。

2.与CListCtrl控件相关的数据类型(1)LV_COLUMN结构该结构仅用于报告式列表视图,用来描述表项的某一列。

要想向表项中插入新的一列,需要用到该结构。

LV_COLUMN结构定义如下:typedef struct_LV_COLUMN{UINT mask; //屏蔽位的组合,表明哪些成员是有效的int fmt; //该列的表头和子项的标题显示格式(LVCF_FMT)int cx; //以象素为单位的列的宽度(LVCF_FMT)LPTSTR pszText; //指向存放列表头标题正文的缓冲区(LVCF_TEXT)int cchT extMax; //标题正文缓冲区的长度(LVCF_TEXT)int iSubItem; //说明该列的索引(LVCF_SUBITEM)}LVCOLUMN;(2)LV_ITEM结构该结构用来描述一个表项或一个子项,它包含了项的各种属性,定义为:typedef struct_LV_ITEM{UINT mask; //屏蔽位的组合,表明哪些成员是有效的int iItem; //从0开始编号的表项索引(行索引)int iSubItem; //从1开始编号的子项索引(列索引),因为编号0的列使用InsertItem时已经写入数据UINT state; //项的状态(LVIF_STATE)UINT stateMask; //项的状态屏蔽LPTSTR pszText; //指向存放项的正文的索引区(LVIF_TEXT)int cchT extMax; //标题正文缓冲区的长度(LVCF_TEXT)int iImage; //图标的索引(LVIF_IMAGE)LPARAM lParam; //32位的附加数据(LV_PARAM)}LV_ITEM;3.CListCtrl类的成员函数(1)列的插入和删除项在初始化列表视图时,先要调用InsertColumn插入各个列,该函数的声明为:int InsertColumn(int nCol,const LV_COLUMN *pColumn);其中参数nCol是新列的索引,参数pColumn指向一个LV_COLUMN结构,函数根据该结构来创建新的列。

clistctrl控件scroll函数

clistctrl控件scroll函数

clistctrl控件scroll函数
CListCtrl是MFC(Microsoft Foundation Classes)库中的一个类,用于创建和管理一个列表控件。

如果你想使用CListCtrl的Scroll函数,你需要先确保你的CListCtrl控件已经被正确地初始化并添加到你的对话框或其他窗口中。

在CListCtrl中,Scroll函数主要有两个重载版本:
1.Scroll(int nHorzScroll, int nVertScroll)
2.Scroll(POINT point, RECT rcUpdate)
第一个版本允许你根据水平和垂直滚动量来滚动列表。

nHorzScroll是水平滚动的量,nVertScroll是垂直滚动的量。

这些参数可以是正数(表示向右或向下滚动)或负数(表示向左或向上滚动)。

第二个版本允许你根据一个点的位置和一个更新区域来滚动列表。

point参数表示要滚动到的位置,rcUpdate参数表示一个矩形区域,该区域将被更新以反映新的滚动位置。

下面是一个使用Scroll函数的简单示例:
cpp复制代码
// 假设你有一个 CListCtrl* pListCtrl 指向你的 CListCtrl 控件
// 你想要向下滚动50个单位
pListCtrl->Scroll(0, 50);
请注意,使用Scroll函数可能会导致数据的重绘,这可能会对性能产生影响。

在处理大量数据时,考虑使用其他方法来滚动列表,例如分页或虚拟模式。

cgridlistctrlex使用示例

cgridlistctrlex使用示例

cgridlistctrlex使用示例CGridListCtrlEx是一个非常有用的MFC控件,它可以在Windows 程序中创建一个网格列表,并提供了许多功能和选项来定制和管理列表中的数据。

使用CGridListCtrlEx,我们可以轻松地显示和编辑数据,并且具有灵活的布局和样式选项。

我们需要在项目中包含CGridListCtrlEx类的头文件,并在对话框类中声明一个成员变量。

然后,在OnInitDialog()函数中,我们可以将该成员变量与对应的对话框控件进行绑定。

接下来,我们可以使用InsertColumn()函数来插入列标题,并使用InsertItem()函数来插入行数据。

对于每个单元格,我们可以使用SetItemText()函数来设置文本内容。

此外,我们还可以使用SetItemData()函数将自定义数据与每个单元格相关联,以便后续处理。

另一个重要的功能是排序。

通过调用SetSortColumn()函数,我们可以指定要按照哪一列进行排序,以及升序还是降序。

排序后,可以使用GetItemText()和GetItemData()函数来获取排序后的数据。

除了基本的插入和排序功能,CGridListCtrlEx还提供了许多其他功能。

例如,我们可以使用SetItemFormat()函数来设置单元格的格式,包括对齐方式和文本颜色。

我们还可以使用SetItemState()函数来设置单元格的状态,例如可编辑、选中等。

除了显示和编辑数据,CGridListCtrlEx还支持行选择和单元格选择。

我们可以使用GetSelectedItem()函数来获取当前选中的行,并使用GetSelectedCell()函数来获取当前选中的单元格。

总结一下,CGridListCtrlEx是一个功能强大且易于使用的MFC控件,可以帮助我们在Windows程序中创建和管理网格列表。

它提供了许多功能和选项,可以满足各种需求。

无论是显示数据,还是进行排序和编辑,CGridListCtrlEx都是一个不可或缺的工具。

CGridCtrl帮助中文版1

CGridCtrl帮助中文版1

[转载]CGridCtrl帮助中文版(1)2009年11月29日星期日 12:25GridCtrl学习指南当我努力为显示和编辑现有表中的数据而使用 CListCtrl 到了极限之后,我意识到我所需要的只不过是一个专用的Grid控件而已。

于是我开始着手写自己的Grid控件,但为了节省时间我决定修改Joe Willcoxson's的免费控件WorldCom,你可以在以下站点 /chinajoe/wcmfclib.html 找到这个东东。

为了让它能做我要做的事情,我分解了他的代码,并且重新修改。

由于代码经过太多的修改,我甚至不能确信最终是否还存在最初的代码。

但无论如何,Joe的代码是一个大框架,而我只是在上面进行加工而已。

工程一开始的时候是计划尽可能的简单但是当我不断发现我不得不考虑新特色的时候,它迅速的膨胀成为一个梦魇。

虽然测试并不是没有遗漏--但是我还是坚信情形不会变得太坏J。

Joe很善意的允许我开放这个资源而不附加任何的语句(毕竟那是基于他的代码),但是由于工程象马拉松似的,所以我在这段代码中使用了两个非常不成熟的条件:这段代码可以以任何方式用于已编译的形式中(包括商业用途)。

只要代码不适用,即使没有作者同意,作者姓名和所有版权信息都原封不动,你可以对代码进行任何形式的使用。

但是,如果没有作者的同意,这篇文章和附带的源代码都不能放在任何网站或论坛上。

你就把它当作是没有任何担保的软件,随意使用吧!我已经尽量除去任何不良的" 特征",对由它引起的任何损害,时间的浪费或者数据丢失等,我不负任何责任。

希望不要问太多关于继续开发下去的到底有多大工作量的问题。

如果你真的要用于商业场合,请给我发email让我知道。

如果没有多少人使用的话,开放和维护/升级代码就没有任何意义。

控件的特点:●使用鼠标可以进行单元格的选择,还可以辅助ctrl和shift的组合键进行选择。

也可以取消选择。

● 行和列可以按照大小进行重排,还可以取消对行、列或两者的排序。

CListControl的用法总结

CListControl的用法总结

CListControl的用法总结14. 判断是否点击在listctrl的checkbox上添加listctrl控件的NM_CLICK消息相应函数void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult){DWORD dwPos = GetMessagePos();CPoint point( LOWORD(dwPos), HIWORD(dwPos) );m_list.ScreenToClient(&point);LVHITTESTINFO lvinfo;lvinfo.pt = point;lvinfo.flags = LVHT_ABOVE;UINT nFlag;int nItem = m_list.HitTest(point, &nFlag);//判断是否点在checkbox上if(nFlag == LVHT_ONITEMSTATEICON){AfxMessageBox("点在listctrl的checkbox上");}*pResult = 0;}15. 右键点击listctrl的item弹出菜单添加listctrl控件的NM_RCLICK消息相应函数void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult){NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;if(pNMListView->iItem != -1){DWORD dwPos = GetMessagePos();CPoint point( LOWORD(dwPos), HIWORD(dwPos) );CMenu menu;VERIFY( menu.LoadMenu( IDR_MENU1 ) );CMenu* popup = menu.GetSubMenu(0);ASSERT( popup != NULL );popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );}*pResult = 0;}16. item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序添加listctrl控件的LVN_ITEMCHANGED消息相应函数void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult){NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;// TODO: Add your control notification handler code here CString sTemp;if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&(pNMListView->uNewState & LVIS_FOCUSED) == 0){sTemp.Format("%d losted focus",pNMListView->iItem);}else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&(pNMListView->uNewState & LVIS_FOCUSED)。

clistctrl setitemtext

clistctrl setitemtext

clistctrl setitemtext什么是CListCtrl?CListCtrl 是MFC(Microsoft Foundation Classes)中的一个类,它是Windows 提供的一个控件,用于在对话框、窗口或者视图中显示列表数据。

List control 提供了类似于表格的界面,可以显示多列的数据,每列的宽度可以自行调整,也可以支持列和行的排序等功能。

CListCtrl 的作用是什么?CListCtrl 可以用来显示和编辑多行多列的文本,用于在列表视图中显示复杂数据,可以方便地进行数据管理和操作。

它不仅可以显示文本数据,还可以显示图像、按钮等其他控件。

它具有很强的灵活性和扩展性,可以根据需要进行自定义,实现各种复杂的界面效果。

如何使用CListCtrl 设置每个单元格的内容?要设置每个单元格的内容,我们可以使用CListCtrl 类中的SetItemText() 函数。

该函数有两个参数,第一个参数是行号(0-based),第二个参数是列号(0-based),第三个参数是要设置的内容。

以下是具体的步骤:步骤1:创建一个CListCtrl 对象并添加列首先,在对话框类中添加一个成员变量,类型为CListCtrl,用于存储列表控件对象。

然后,在OnInitDialog() 函数中初始化列表控件对象,设置初始属性(如显示行选中、网格线等),并添加列表的列名。

步骤2:设置每个单元格的内容在需要设置每个单元格内容的地方,调用SetItemText() 函数即可。

假设我们要设置第一行第一列的内容为"Hello, World!",可以使用以下代码:m_ListCtrl.SetItemText(0, 0, _T("Hello, World!"));这样就设置了第一行第一列的内容为"Hello, World!"。

步骤3:重复步骤2根据需要,重复调用SetItemText() 函数设置其他单元格的内容。

CListCtrl控件中InsertItem和SettItemtext函数的用法简介

CListCtrl控件中InsertItem和SettItemtext函数的用法简介

本人初次用CListCtrl控件的时候,对于InsertItem和SetrtItemtext两个函数的作用始终不是太懂,比如如果不先调用InsertItem这个函数,后面的InsertItemtext函数写了,也不起作用.查了MSDN,也没有收获,经过有人点拔,才恍然大悟.今天将经验说一下,希望有共同爱好者少走弯路.InsertItem在MSDN中的函数原型如下int InsertItem(const LVITEM* pItem );int InsertItem( int nItem, LPCTSTR lpszItem );int InsertItem( int nItem, LPCTSTR lpszItem, int nImage );int InsertItem( UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam );一般我们用的比较多的时第2种和第三种,其中第三种时建立一个带有头标的项要调用第三个,可以先声明一个CImageList对象m_ImageList.Create(16,16,true,2,2);m_ImageList.Add(theApp.LoadIcon(IDR_MAINFRAME));m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);这样,控件中的每一行的开头就有一个应用程序图标现在转入正题,先介绍一下INSERTITEM个个参数的意义nItem: 控件中行的索引lpszItem :控件头的名字........................................................................................................ .................................................................................................SettItemtext函数的原型BOOL SetItemText(int nItem,int nSubItem,LPTSTR lpszText );******************注意这个函数中的参数nItem就是INSERTITEM中的NITEM,也就是说InsertItem是向控件声请一行来放数据,记住只是声请,那么方数据的工作就又SETITEMTEXT来实现举例如下:CListCtrl m_listctrl;m_listctrl = new ClistCtrl();m_listctrl.Creae(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_R EPORT|LVS_EDITLABELS,bigRect,this,IDC_LIST1);m_listctrl.InsertItem(0,"01");m_SetItemtext(0,1,"1");m_SetItemtext(0,2,"2");''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''至于要添多少多少个数据,就由你的控件由多少列了获得可以这样的道int columns=m_listctr.GetHeaderCtrl()->GetItemCount();获得可以这样的道int rows= m_listctrl.GetItemCount();下面附一个本人学习的实例// DataView.cpp : implementation of the CDataView class//#include "stdafx.h"#include "Data.h"#include "DataDoc.h"#include "DataView.h"#include "EditDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CDataViewIMPLEMENT_DYNCREATE(CDataView, CView)BEGIN_MESSAGE_MAP(CDataView, CView)//{{AFX_MSG_MAP(CDataView)ON_COMMAND(IDM_USER, OnUser)ON_COMMAND(IDM_UP, OnUp)ON_COMMAND(IDM_DOWN, OnDown)ON_COMMAND(IDM_EDIT, OnEdit)ON_COMMAND(IDM_ADD, OnAdd)ON_COMMAND(IDM_DELETE, OnDelete)ON_COMMAND(IDM_SAVE, OnSave)//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)ON_NOTIFY(NM_KILLFOCUS, IDC_LIST1, OnKillfocusList1) END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CDataView construction/destructionCDataView::CDataView(){// TODO: add construction code herem_nIndex = -1;}CDataView::~CDataView(){}BOOL CDataView::PreCreateWindow(CREATESTRUCT& cs) {// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CDataView drawingvoid CDataView::OnDraw(CDC* pDC){CDataDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here}/////////////////////////////////////////////////////////////////////////////// CDataView printingBOOL CDataView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CDataView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: add extra initialization before printing}void CDataView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CDataView diagnostics#ifdef _DEBUGvoid CDataView::AssertValid() const{CView::AssertValid();}void CDataView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CDataDoc* CDataView::GetDocument() // non-debug version is inline {ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDataDoc))); return (CDataDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CDataView message handlersvoid CDataView::OnInitialUpdate(){CView::OnInitialUpdate();// TODO: Add your specialized code here and/or call the base class CDC *dc = GetDC();CRect rect;this->GetClientRect(&rect);CString str = "加载数据库资源到列表中";CSize sz = dc->GetTextExtent(str);rect.right = sz.cx;rect.bottom = sz.cy;CStatic *state = new CStatic;state->Create(str,WS_CHILD,rect,this);state->ShowWindow(SW_SHOW);this->ReleaseDC(dc);InitListCtrl(rect);m_ImageList.Create(16,16,true,2,2);m_ImageList.Add(theApp.LoadIcon(IDR_MAINFRAME));}void CDataView::InitListCtrl(CRect rect){CRect bigRect;this->GetClientRect(&bigRect);bigRect.top = rect.bottom;m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_RE PORT|LVS_EDITLABELS,bigRect,this,IDC_LIST1);//m_ListCtrl.Insert(0,"用户名");//m_ListCtrl.InsertItem(1,"密码");CFont *m_pFont = new CFont();m_pFont->CreateFont(20, // nHeight0, // nWidth0, // nEscapement0, // nOrientationFW_NORMAL, // nWeightFALSE, // bItalicFALSE, // bUnderline0, // cStrikeOutDEFAULT_CHARSET, // nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily "Arial");m_ListCtrl.SetFont(m_pFont);m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX _GRIDLINES);m_ListCtrl.SetBkColor(RGB(247,247,255));m_ListCtrl.SetTextColor(RGB(0,0,255));m_ListCtrl.SetTextBkColor(RGB(247,247,255));m_ListCtrl.InsertColumn(0,"ID",LVCFMT_LEFT,100,-1);m_ListCtrl.InsertColumn(1,"用户名",LVCFMT_LEFT,100,-1);m_ListCtrl.InsertColumn(2,"密码",LVCFMT_LEFT,200,-1);m_ListCtrl.InsertItem(0,"01");m_ListCtrl.SetItemText(0,1,"chetnao");m_ListCtrl.SetItemText(0,2,"921984");m_ListCtrl.InsertItem(1,"02");m_ListCtrl.SetItemText(1,1,"mada");m_ListCtrl.SetItemText(1,2,"345678");m_ListCtrl.InsertItem(2,"03");m_ListCtrl.SetItemText(2,1,"luoxian");m_ListCtrl.SetItemText(2,2,"987654");}extern CDataApp theApp;void CDataView::OnUser(){// TODO: Add your command handler code here_RecordsetPtr m_pRecordset;try{m_pRecordset = theApp.m_pConnection->Execute("select * from user12",NULL,adCmdText);}catch(_com_error e){AfxMessageBox(e.ErrorMessage());AfxMessageBox(e.Description());CString str;str.Format("%ld",e.Error);AfxMessageBox(str);return;}if(m_pRecordset->BOF){MessageBox("表中无记录");return;}else{int len = m_ListCtrl.GetHeaderCtrl()->GetItemCount();while(!m_pRecordset->adoEOF){m_ListCtrl.InsertItem(2,(_bstr_t)m_pRecordset->GetCollect("I D"));m_ListCtrl.InsertItem(1,(_bstr_t)m_pRecordset->GetCollect("user name"));m_ListCtrl.InsertItem(0,(_bstr_t)m_pRecordset->GetCollect("pa ssword"));/*for(int i=0;i<len;i++){m_ListCtrl.SetItemText(i,0,(_bstr_t)m_pRecordset->GetCollect("I D"));m_ListCtrl.SetItemText(i,1,(_bstr_t)m_pRecordset->GetCollect("u sername"));m_ListCtrl.SetItemText(i,2,(_bstr_t)m_pRecordset->GetCollect("p assword"));}*/m_pRecordset->MoveNext();}}}void CDataView::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult){POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();m_nIndex = m_ListCtrl.GetNextSelectedItem(pos);}void CDataView::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult){POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();m_nIndex = m_ListCtrl.GetNextSelectedItem(pos);CEditDlg dlg;dlg.m_strNo = m_ListCtrl.GetItemText(m_nIndex,0);dlg.m_strName = m_ListCtrl.GetItemText(m_nIndex,1);dlg.m_strPassword = m_ListCtrl.GetItemText(m_nIndex,2);if(IDOK == dlg.DoModal()){m_ListCtrl.SetItemText(m_nIndex,0,dlg.m_strNo);m_ListCtrl.SetItemText(m_nIndex,1,dlg.m_strName);m_ListCtrl.SetItemText(m_nIndex,2,dlg.m_strPassword);}*pResult = 0;}void CDataView::OnUp(){// TODO: Add your command handler code herem_ListCtrl.SetFocus();if(m_nIndex == -1){MessageBox("请选择一行!");return ;}if(m_nIndex == 0){MessageBox("你选中的行已经时顶行!");return ;}CString strNo,strName,strPassword;strNo = m_ListCtrl.GetItemText(m_nIndex,0);strName = m_ListCtrl.GetItemText(m_nIndex,1);strPassword = m_ListCtrl.GetItemText(m_nIndex,2);m_ListCtrl.DeleteItem(m_nIndex);m_ListCtrl.InsertItem(m_nIndex-1,strNo);m_ListCtrl.SetItemText(m_nIndex-1,1,strName);m_ListCtrl.SetItemText(m_nIndex-1,2,strPassword);m_nIndex--;m_ListCtrl.SetItemState(m_nIndex,LVIS_FOCUSED|LVIS_SELECTE D,LVIS_FOCUSED|LVIS_SELECTED);}void CDataView::OnKillfocusList1(NMHDR* pNMHDR, LRESULT* pResult){m_nIndex = -1;}void CDataView::OnDown(){// TODO: Add your command handler code herem_ListCtrl.SetFocus();if(m_nIndex == -1){MessageBox("请选择一行!");return ;}if(m_nIndex == m_ListCtrl.GetItemCount()-1){MessageBox("已经时最后一行!");return ;}CString strNo,strName,strPassword;strNo = m_ListCtrl.GetItemText(m_nIndex,0);strName = m_ListCtrl.GetItemText(m_nIndex,1);strPassword = m_ListCtrl.GetItemText(m_nIndex,2);m_ListCtrl.DeleteItem(m_nIndex);m_ListCtrl.InsertItem(m_nIndex+1,strNo);m_ListCtrl.SetItemText(m_nIndex+1,1,strName);m_ListCtrl.SetItemText(m_nIndex+1,2,strPassword);m_nIndex++;m_ListCtrl.SetItemState(m_nIndex,LVIS_FOCUSED|LVIS_SELE CTED,LVIS_FOCUSED|LVIS_SELECTED);}void CDataView::OnEdit(){// TODO: Add your command handler code herePOSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();m_nIndex = m_ListCtrl.GetNextSelectedItem(pos);if(m_nIndex == -1){MessageBox("请选择一行!");return ;}CEditDlg dlg;dlg.m_strNo = m_ListCtrl.GetItemText(m_nIndex,0);dlg.m_strName = m_ListCtrl.GetItemText(m_nIndex,1);dlg.m_strPassword = m_ListCtrl.GetItemText(m_nIndex,2);if(IDOK == dlg.DoModal()){m_ListCtrl.SetRedraw(false);m_ListCtrl.DeleteItem(m_nIndex);m_ListCtrl.InsertItem(m_nIndex,dlg.m_strNo);m_ListCtrl.SetItemText(m_nIndex,1,dlg.m_strName);m_ListCtrl.SetItemText(m_nIndex,2,dlg.m_strPassword);m_ListCtrl.SetRedraw(true);}}void CDataView::OnAdd(){// TODO: Add your command handler code hereCEditDlg dlg;if(dlg.DoModal() == IDOK){intcount=m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),dlg.m_strNo); m_ListCtrl.SetItemText(count,1,dlg.m_strName);m_ListCtrl.SetItemText(count,2,dlg.m_strPassword);}}void CDataView::OnDelete(){// TODO: Add your command handler code hereif(m_nIndex == -1){MessageBox("请选择一行!");return ;}m_ListCtrl.DeleteItem(m_nIndex);UINT flag = LVIS_SELECTED|LVIS_FOCUSED;m_ListCtrl.SetItemState(m_nIndex-1, flag, flag);}void CDataView::OnSave(){// TODO: Add your command handler code hereCFile f;if(f.Open("save.txt",CFile::modeCreate|CFile::modeWrite,NULL)) {CString str="ID号\t\tusername\t\tpassword\r\n";f.Write(str,strlen(str)+1);for(int i=0;i<m_ListCtrl.GetItemCount();i++){str=m_ListCtrl.GetItemText(i,0)+"\t\t"+m_ListCtrl.GetItemText(i,1)+ "\t\t"+m_ListCtrl.GetItemText(i,2)+"\r\n";f.Write(str,strlen(str)+1);}f.Close();MessageBox("保存成功!");}else{MessageBox("保存失败!");}}。

列表视图控件CListCtrl成员函数详解

列表视图控件CListCtrl成员函数详解

CListCtrl类的成员函数列表如下:构造函数:ClistCtrl构造一个CListCtrl对象Create创建列表控件并将其附加给CListCtrl对象属性设置:GetBkColor获取列表视图控件的背景色SetBkColor设置列表视图控件的背景色GetImageList获取用于绘制列表视图项的图象列表的句柄SetImageList指定一个图象列表到列表视图控件GetItemCount获取列表视图控件中的项的数量GetItem获取列表视图项的属性GetCallbackMask获取列表视图控件的回调掩码SetCallbackMask设置列表视图控件的回调掩码GetNextItem查找指定特性和指定指定项关系的列表视图项GetFirstSeletedItemPosition在列表视图控件中获取第一个选择的列表视图项的位置GetNextSeletedItem为重复而获取下一个选择的列表视图GetItemRect获取项的有界矩形SetItemPosition在列表视图控件中移动一项到指定位置GetItemPosition获取列表视图项的位置GetStringWidth指定需要显示所有指定字符串的最小列宽GetEditControl获取用于编辑一个项文本的编辑控件的句柄GetColumn获取控件的列的属性SetColumn设置列表视图列的属性GetColumnWidth获取报表视图或列表视图中的列的宽度SetColumnWidth改变报表视图或列表视图中的列的宽度GetCheck获取与某项相关的状态图象的当前显示状态SetCheck设置与某项相关的状态图象的当前显示状态GetViewRect获取列表视图控件中所有项的有界矩形GetTextColor获取列表视图控件的文本颜色SetTextColor设置列表视图控件的文本颜色GetTextBkColor获取列表视图控件的文本背景色SetTextBkColor设置列表视图控件的文本背景色GetTopIndex获取最高级项的索引GetCountPerPage计算可正好垂直放入列表视图控件中的项的数目GetOrigin获取列表视图控件的最初的当前视图SetItemState改变列表视图控件的项的状态GetItemState获取列表视图控件的项的状态GetItemText获取列表视图项或子项的文本SetItemText设置列表视图项或子项的文本SetItemCount准备一个列表视图控件以添加大量的项GetItemData获取与某项相关的应用所指定的值SetItemData设置项的应用指定的值GetSelectedCount获取列表视图控件中选择项的数量SetColumnOrderArray设置列表视图控件的列序(左或右)GetColumnOrderArray获取列表视图控件的列序(左或右)SetIconSpacing设置列表视图控件中的图标的距离GetHeaderCtrl获取列表视图控件的标题控件GetHotCursor获取在热调试对列表视图控件有效时使用的游标SetHotCursor设置在热调试对列表视图控件有效时使用的游标GetSubItemRect获取列表视图控件中某项的有界矩形GetHotItem获取当前在游标下的列表视图项SetHotItem设置列表视图控件的当前热项GetSelectionMark获取列表视图控件的选择屏蔽SetSelectionMark设置列表视图控件的选择屏蔽GetExtendedStyle获取列表视图控件的当前扩展风格SetExtendedStyle设置列表视图控件的当前扩展风格SubItemHitTest指定哪个列表视图项在指定位置GetWorkAreas获取列表视图控件的当前工作区GetNumberOfWorkAreas获取列表视图控件的当前工作区数量SetItemCountEx设置虚列表视图控件的项的数量SetWorkAreas设置列表视图控件中图标可以显示的区域ApproximateViewRect指定显示列表视图控件项所需的宽度和高度GetBkImage获取列表视图控件的当前背景图象SetBkImage设置列表视图控件的当前背景图象GetHoverTime获取列表视图控件的当前逗留时间SetHoverTime设置列表视图控件的当前逗留时间操作函数:InsertItem在列表视图控件中插入一个新项DeleteItem从控件中删除一项DeleteAllItems从控件中删除所有项FindItem查找具有指定的字符的列表视图项SortItems使用应用定义的比较函数排序列表视图项HitTest指定哪个列表视图在指定的位置上EnsureVisible保证项是可见的Scroll滚动列表视图控件的内容ReDrawItems强迫列表视图控件刷新一些项Update强迫控件刷新一个指定的项Arrange调整一栏里的项EditLabel开始项文本该处编辑InsertColumn插入列表视图控件中的新列DeleteColumn从列表视图控件中删除一列CreateDragImage为指定的项构造一个拖动图象列表可覆盖的函数:DrawItem当自绘制控件的可视部分改变时被调用一些函数的详解:1 Create:创建列表控件并将其附加给CListCtrl对象BOOL Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID);返回值:如果成功,则返回非零值,否则返回0.参数如下:dwStyle: 为列表中的控件指定其风格.可为控件使用控件风格列表中的任意组合. rect: 为列表中的控件指定其大小和位置.它既可以是一个CRect对象,也可以是一个Rect 结构.pParentWnd: 为列表中的控件指定其父窗口,通常为CDialog.它不应当为空.nID: 为列表中的控件指定其ID号.说明:可以用两步来构造一个CListCtrl.首先调用构造函数,然后调用Create函数.这样将创建一个列表视图控件,并将附加给CListCtrl对象.参数dwStyle可以是以下值的组合:LVS_ALIGNLEFT 在图标和小图标视图中指定项左对齐.LVS_ALIGNTOP 在图标和小图标视图中指定项在控件的顶端对齐.LVS_AUTOARRANGE 在图标或小图标视图中指定图标自动保持对齐.LVS_EDITABELS 允许项文本能够适本地进行编辑.父窗口必须运行了LVN_ENDLABLEDIT通知消息.LVS_ICON 指定为图标视图.LVS_LIST 指定为列表视图.LVS_NOCOLUMNHEADER 指定在报表视图中不显示列标题.缺省时,在报表视图中列有标题.LVS_NOLABELWRAP 在图标视图的单行中显示项文本,缺省时,在图标视图中项文本有可能被遮住.LVS_NOSCROLL 不允许滚动,所有项都必须在客户可视的区域内.LVS_NOSORTHEADER 指定列标题不象按钮那样工作.这种风格是有用的,例如,当在报表视图中单击列标题,将不会带来例如排序那样的动作.LVS_OWNERDRAWFIXED 在报表视图中允许所有者窗口为项着色.列表视图控件发送一条WM_DRAWITWM 消息来为每一项着色;但它不为每一子项发送独立的消息.DRAWITEMSTRUCT结构中的itemDate成员则包含了指定列表视图项的项数据.LVS_REPORT 指定报表视图.LVS_SHAREIMAGELISTS 指定控件没有归属于它的图象列表的所有权(也就是说,当控件被销毁后,图象列表不会被销毁).该风格能够是同一个图象列表用于多个列表视图控件中.LVS_SHOWSELALWAYS 总是显示选择框,即使任何控件都没有焦点.LVS_SINGLESEL 允许每次只能选择一个项.缺省时,同时能选择多项.LVS_SMALLICON 指定为小图标视图.LVS_SORTASCENDING 使项按照项文本的升序方式排列.LVS_SORTDESCENDING 使项按照项文本的降序方式排列.2 InsertColumn:插入列表视图控件中的新列函数原型:int InsertColumn(int nCol, const LVCOLUMN* pColumn);int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1);参数如下:nCol表示要插入列的列号.pColumn为新建列属性的LVCOLUMN结构的地址.对于第二种函数重载,参数lpszcolumnHeading 为列标题的字符串的地址,所以可以使用一个字符串,比如"姓名".nFormat指定列对齐方式的整数,缺省值是左对齐.它可以为下列值之一:LVCFMT_LEFT,LVCFMT_RIGHT或LVCFMT_CENTER.nWidth以像素为单位的列宽.缺省值为-1,表示没有设置列宽.nSubItem与列相关联的子项的索引.缺省值为-1,表示没有子项与列相关.3 InsertItem:在列表视图控件中插入一个新项函数原型如下:int InsertItem( const LVITEM* pItem );int InsertItem( int nItem, LPCTSTR lpszItem );int InsertItem( int nItem, LPCTSTR lpszItem, int nImage );int InsertItem( UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam );其中,nItem是控件中行的索引、lpszItem是控件头的名字.一般用的比较多的是第二种和第三种,其中第三种是建立一个带有头标的项.返回值: 如果插入成功的话,就返回新项的索引,否则就返回-1.4 SetExtendedStyle:设置列表视图控件的当前扩展风格函数声明如下:DWORD SetExtendedStyle(DWORD dwNewStyle ); 其中dwNewStyle为指定的扩展样式,可以为下列值: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_REGIONALLVS_EX_INFOTIP//将提示信息窗口的消息通知父窗口LVS_EX_UNDERLINEHOTLVS_EX_UNDERLINECOLDLVS_EX_MULTIWORKAREAS//多工作区5 SetItemText:设置列表视图项或子项的文本BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );例子:InsertItem(0,"");SetItemText(0,0,"1.培训时间");SetItemText(0,1,"[ ]");6 EnsureVisible:保证项是可见的BOOL EnsureVisible(int nItem,BOOL bPartialOK)返回值:如果成功,则返回非零值,否则为0.参数:nItem: 将可视的列表视图项的索引值.bPartialOK: 指定是否部分可视是可以接受的.说明:调用该函数将使列表视图项至少部分可视.如果必要,可以滚动列表视图控件.同时,如果参数bPartialOK等于零,那么当项部分可视时,将不发生滚动.7 DeleteAllItems从控件中删除所有项BOOL DeleteAllItems()返回值:如果成功,则返回非零值,否则为0.。

CListBox常用成员函数

CListBox常用成员函数

ClistBox类的常用成员函数①常用成员函数:ClistBox:: GetTopIndex 返回列表框中第一个可见字符串的索引int GetTopIndex( ) const;返回值:如果成功,则为列表框中第一个可见项的基于零的索引,否则为LB_ERR。

说明:获取列表框中第一个可见项的基于零的索引。

开始时,项0在列表框顶部,但如果列表框滚动,则另一项将在顶部。

ClistBox::SetTopIndex 设置列表框中第一个可见字符串的基于零的索引int SetTopIndex( int nIndex );返回值:如果成功,则为0;若出错,则为LB_ERR。

参数:指定列表框项的基于零的索引。

说明:保证某个列表框项可见。

系统滚动列表框,直到由nIndex 指定的各项出现在列表框顶部或到达最大滚动范围。

ClistBox:: AddString添加一个字符串到列表框中int AddString( LPCTSTR lpszItem );返回值:列表框中字符串的基于零的索引。

如果出错,则返回LB_ERR;如果没有足够的有效空间存储新字符串,则为LB_ERRSPACE。

参数:指向将被添加的空终止字符串的指针。

说明:调用此成员函数添加一个字符串到列表框中。

如果列表框未被创建为LBS_SORT风格,则字符串被添加到列表末尾。

否则,字符串被插入到列表中,并把列表排序。

如果列表被创建为LBS_SORT 风格而不是LBS_HASSTRINGS 风格,则框架通过对CompareItem成员函数的一个或多个调用来排序列表。

使用InsertString插入一个字符串到列表框的指定位置。

ClistBox:: DeleteString从列表框中删除一个字符串int DeleteString(UINT nIndex);ClistBox:: InsertString在列表框中指定位置插入一个字符串CListBox::InsertStringint InsertString( int nIndex, LPCTSTR lpszItem );返回值:字符串被插入位置的基于零的索引。

CList类常见成员函数

CList类常见成员函数

CList常见成员函数CList::AddTailPOSITION AddTail( ARG_TYPE newElement );返回值:返回新插入元素的POSITION值。

参数:newElement 新元素。

说明:添加一个新元素到此列表的后面。

操作前此列表可能为空。

CList::RemoveHeadTYPE RemoveHead( );返回值:以前在列表头的元素。

参数:TYPE 指定列表对象类型的模板参数。

说明:从列表头删除元素并返回其指针。

必须保证在调用RemoveHead前列表不为空。

CList::AddHeadPOSITION AddHead( ARG_TYPE newElement );返回值:第一个版本返回新插入元素的POSITION值。

参数:ARG_TYPE 确定列表元素类型的参数(可能为参考)。

newElement 新元素。

说明:添加一个新元素或元素列表到此列表的标题前面。

操作前此列表可能为空。

CList::RemoveTailTYPE RemoveTail( );返回值:列表尾部的元素。

参数:TYPE 指定列表对象类型的模板参数。

说明:从列表尾删除元素并返回其指针。

必须保证在调用RemoveTail前列表不为空。

CList::GetAtTYPE& GetAt( POSITION position );返回值:请参阅GetHead的返回值描述。

参数:TYPE 指定列表对象类型的模板参数。

position 由前一个GetHeadPosition或Find成员函数调用返回的POSITION值。

说明:类型POSITION的变量是列表的关键字。

它不同于索引,不能自己操作POSITION值。

GetAt返回与指定位置有关的元素(或参考元素)。

必须保证你的POSITION值代表列表中的一个有效位置。

CList::SetAtvoid SetAt( POSITION pos, ARG_TYPE newElement );参数:pos 设置的元素的POSITION。

可编辑子项的CListCtrl类

可编辑子项的CListCtrl类

可编辑子项的CListCtrl类作者:Nobita摘要:本文对CListCtrl控件进行了一个扩展,使它即可以编辑主项(Item),又可以编辑子项(SubItem),并尽量符合CListCtrl的操作习惯。

一、说明大家都知道在MFC中通过给CListCtrl设置LVS_EDITLABELS属性,并且在程序中响应控件的LVN_ENDLABELEDIT消息可以修改列表控件每一行的第一项,也就是主项(Item)。

代码如下:void CEditListCtrlSampleDlg::OnEndlabeleditList1(NMHDR* pNMHDR, LRESULT* pResult){LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;// TODO: Add your control notification handler code here*pResult = TRUE; //TRUE值表示可以修改主项,FALSE值表示不修改主项}但是让人郁闷的是,微软留了一手,CListCtrl不支持直接修改子项(SubItem)。

无奈之下只好自力更生,对CListCtrl进行扩展。

>_<!!!!二、原理通过在浩如烟海的互联网上查找资料(当然包括了大名鼎鼎的VCKBASE),发现现有的实现大都是对子项鼠标单击一次就可以编辑。

但本人对CListCtrl的单击一次高亮文本,再单击一次才开始编辑的操作模式感觉比较喜欢,所以就有了这篇文章的诞生。

要想实现高亮文本也就是对文本进行着色处理,这可以通过对NM_CUSTOMDRAW消息进行处理实现,但是类向导中没有这个消息映射只能进行手工添加。

要想编辑文本则可以通过EditLabel(int nItem)成员函数以及对LVN_BEGINLABELEDIT和LVN_ENDLABELEDIT的消息处理实现。

三、实现本文最终实现的CEditListCtrl扩展类在尽量符合CListCtrl操作步骤的情况下实现对主项及子项的可编辑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CListCtrl::GetItemState CListCtrl::GetItemText CListCtrl::GetNextItem CListCtrl::GetNextItemIndex
检索列表视图项的状态。 检索列表视图项目或子项的文本。 搜索一个列表视图项与指定的属 性以及对特定项的指定关系。 检索项的索引在具有指定的属性 的当前列表视图控件的。 检索列表视图项目位置的索引, 并 且, 接下来选定的位置列表重复查 看项目。 检索操作范围的当前列表视图控 件的。 检索列表视图控件的当前视图原 点。 检索列表视图控件的边框的颜色。 检索当前所选列的索引在列表控 件中。 检索选定项的数量列表视图控件 的。 检索列表视图控件的选择标记。 命令式最小的列宽显示所有给定 的字符串。 检索一个项的边框列表视图控件 的。 检索列表视图控件的文本背景色。 检索列表视图控件的文本颜色。 检索有关个平铺的信息在列表视 图控件。 检索有关列表视图控件的信息平 铺视图。 检索列表视图控件使用显示工具 提示的工具提示控件。 检索最顶层的可见项的索引。 获取列表视图控件的视图。 检索所有项目边框的列表视图控 件的。 检索列表视图控件的当前工作区 域。 确定列表视图控件是否具有指定
索该字符串显示在中。 CListCtrl::GetExtendedStyle CListCtrl::GetFirstSelectedItemPosition CListCtrl::GetFocusedGroup CListCtrl::GetGroupCount CListCtrl::GetGroupInfo CListCtrl::GetGroupInfoByIndex CListCtrl::GetGroupMetrics CListCtrl::GetGroupRect CListCtrl::GetGroupState CListCtrl::GetHeaderCtrl CListCtrl::GetHotCursor CListCtrl::GetHotItem CListCtrl::GetHoverTime CListCtrl::GetImageList CListCtrl::GetInsertMark CListCtrl::GetInsertMarkColor CListCtrl::GetInsertMarkRect CListCtrl::GetItem CListCtrl::GetItemCount CListCtrl::GetItemData CListCtrl::GetItemIndexRect CListCtrl::GetItemPosition CListCtrl::GetItemRect CListCtrl::GetItemSpacing 检索列表视图控件的当前扩展样 式。 检索首先选定的位置列表在列表 视图控件的视图项。 检索具有键盘焦点在当前列表视 图控件组。 检索组的数量的当前列表视图控 件的。 获取列表视图控件的指定组的信 息。 检索有关指定组的信息的列表视 图控件的。 检索组的指标。 检索指定的组的边框当前列表视 图控件的。 检索指定的组的当前状态列表视 图控件的。 检索列表视图控件的标头控件。 在快捷跟踪为列表视图控件时, 启 用检索使用的光标。 当前检索列表视图项在光标之下。 检索列表视图控件的当前悬停时 间。 检索图像的处理列出用于绘制列 表视图项。 检索插入标记的当前位置。 检索插入标记的当前颜色。 检索限制插入点的矩形。 检索列表视图项目的属性。 检索项的数目列表视图控件的。 检索该特定的值与项目。 检索一个子项的全部或部分的边 框在当前列表视图控件的。 检索列表视图项的位置。 检索项目的边框。 计算项之间的间隔在当前列表视 图控件。
名称 CListCtrl::ApproximateViewRect CListCtrl::Arrange CListCtrl::CancelEditLabel CListCtrl::Create CListCtrl::CreateDragImage
说明 确定需要的宽度和高度显示列表 视图控件中的项。 对齐网格中的项目。 取消编辑操作的项文本。 创建一个列表控件并将它附加到 CListCtrl 对象。 生成一个拖动图像为指定的项列 表。 使用指定的 Windows 扩展的样式创 建一个列表控件并将它附加到 CListCtrl 对象。 从控件中删除所有项。 从列表视图控件中删除列。 从控件中删除项。 调用, 当所有者描述控件中的可视 方面是。 启动就地编辑项目的文本。 启用或禁用列表中的项是否查看 控件显示为组。 确保项目可见。 搜索指定属性的列表视图项。 检索列表视图控件的背景色。 检索列表视图控件的当前背景图 像。 检索列表视图控件的回调掩码。 检索状态图像的当前显示状态与 项目。 检索控件的列的属性。 检索列顺序(从左到右)列表视图 控件。 检索列的宽度在报表视图的或列 表视图。 计算可能包含垂直列表视图控件 项的数目。 检索使用的编辑控件中处理编辑 项目的文本。 如果当前列表视图控件为空, 则检
的组。 CListCtrl::HitTest CListCtrl::InsertColumn CListCtrl::InsertGroup CListCtrl::InsertGroupSorted CListCtrl::InsertItem CListCtrl::InsertMarkHitTest CListCtrl::IsGroupViewEnabled CListCtrl::IsItemVisible CListCtrl::MapIDToIndex CListCtrl::MapIndexToID CListCtrl::MoveGroup CListCtrl::MoveItemToGroup CListCtrl::RedrawItems CListCtrl::RemoveAllGroups CListCtrl::RemoveGroup CListCtrl::Scroll CListCtrl::SetBkColor CListCtrl::SetBkImage CListCtrl::SetCallbackMask CListCtrl::SetCheck CListCtrl::SetColumn CListCtrl::SetColumnOrderArray CListCtrl::SetColumnWidth CListCtrl::SetExtendedStyle CListCtrl::SetGroupInfo 确定列表视图项在指定的位置。 插入新列列表视图控件。 插入每组添加到列表视图控件。 指定的组添加到中的有序列表组 的插入。 插入新项列表视图控件。 检索插入点最接近指定的点。 确定分组视图是否为列表视图控 件启用。 指示当前列表视图控件的指定项 目是否可见。 映射一个项目的唯一 ID 在当前列 表视图控件的进行索引。 映射一个项的索引在当前列表视 图控件的设置为唯一 ID. 将指定的组。 将指定的组移动到列表视图控件 的指定零基于索引。 强制列表视图控件重新绘制项的 大小。 从列表视图控件移除所有组。 从列表视图控件中移除指定的组。 移动列表视图控件的内容。 设置列表视图控件的背景色。 设。 设置状态图像的当前显示状态与 项目。 设置列表视图列的属性。 设置列顺序(从左到右)列表视图 控件。 更改列的宽度在报表视图的或列 表视图。 设置列表视图控件的当前扩展样 式。 设置列表视图控件的指定组的信
CListCtrl::GetNextSelectedItem
CListCtrl::GetNumberOfWorkAreas CListCtrl::GetOrigin CListCtrl::GetOutlineColor CListCtrl::GetSelectedColumn CListCtrl::GetSelectedCount CListCtrl::GetSelectionMark CListCtrl::GetStringWidth CListCtrl::GetSubItemRect CListCtrl::GetTextBkColor CListCtrl::GetTextColor CListCtrl::GetTileInfo CListCtrl::GetTileViewInfo CListCtrl::GetToolTips CListCtrl::GetTopIndex CListCtrl::GetView CListCtrl::GetViewRect CListCtrl::GetWorkAreas CListCtrl::HasGroup
息。 CListCtrl::SetGroupMetrics CListCtrl::SetHotCursor CListCtrl::SetHotItem CListCtrl::SetHoverTime CListCtrl::SetIconSpacing CListCtrl::SetImageList CListCtrl::SetInfoTip CListCtrl::SetInsertMark CListCtrl::SetInsertMarkColor CListCtrl::SetItem CListCtrl::SetItemCount CListCtrl::SetItemCountEx CListCtrl::SetItemData CListCtrl::SetItemIndexState CListCtrl::SetItemPosition CListCtrl::SetItemState CListCtrl::SetItemText CListCtrl::SetOutlineColor CListCtrl::SetSelectedColumn CListCtrl::SetSelectionMark CListCtrl::SetTextBkColor CListCtrl::SetTextColor CListCtrl::SetTileInfo CListCtrl::SetTileViewInfo CListCtrl::SetToolTips 设置列表视图控件组度量。 在快捷跟踪为列表视图控件时, 启 用设置的光标。 设置列表视图控件的当前快捷项 目。 设置列表视图控件的当前悬停时 间。 将图标之间的间隔在列表视图控 件。 分配图像列表与 list view 控件。 设置工具提示文本。 将插入点移到所定义的位置。 设置的颜色插入点。 设置某些或所有列表视图项目的 属性。 一个列表视图控件用于添加大量 项做好准备。 设置虚拟的项计数列表视图控件。 设置项目的特定于应用程序的值。 设置一个项的状态在当前列表视 图控件的。 将项移动到列表视图控件中的指 定位置。 更改项目的状态在列表视图控件 的。 更改列表视图项目或子项的文本。 设置列表视图控件的边框的颜色。 设置列表视图控件的选定列。 设置列表视图控件的选择标记。 设置文本的背景颜色列表视图控 件的。 设置列表视图控件的文本颜色。 设置列表视图控件的平铺的信息。 设置列表视图控件使用平铺视图 的信息。 设置列表视图控件将使用显示工 具提示的工具提示控件。
相关文档
最新文档