VS2008下的CListCtrl控件的使用

 

                                                              VS2008下的CListCtrl控件的使用

     最近要适应VS这个开发环境,从VC6移植到VS有很多不习惯.在一个小程序中利用到了 CListCtrl控件的时候 就出现了问题 。其实自VC6下这个控件我还是会使用的 主要指Report风格 。。
下面是VS下的CListCtrl控件的使用。。
     我们利用的时候主要是针对CListCtrl的 report风格。关于CListCtrl,有基本风格和扩展风格  。 设置控件风格的API  SetWindowLong(可以设置基本风格和扩展风格),还有就是CListCtrl类的
SetExtendedStyle函数可以设置扩展风格 。

下面是基本风格:
LVS_ALIGNLEFT  指定项是左对齐的
LVS_ALIGNTOP   指定靠顶部对齐
LVS_AUTOARRANGE  指定图标自动安排在大图标和小图标视图
LVS_EDITLABELS   允许项目文本进行编辑但是父窗口必须处理LVN_ENDLABELEDIT消息
LVS_ICON  指定是ICON视图
LVS_LIST  指定是列表视图
LVS_REPORT 指定是repoet风格
LVS_NOCOLUMNHEADER  指定在一个report视图列头不显示,但是默认下是显示的
LVS_NOLABELWRAP   在图标视图中单行显示项文本 ,缺省情况下项文本可以包含在图标列表
LVS_NOSCROLL   禁用scroll ,所有项必须在客户区域内 也就是我们可以看见的部分   
LVS_NOSORTHEADER   Specifies that column headers do not work like buttons. This style is useful if clicking a column header in report view does not carry out an action, such as sorting.
LVS_SMALLICON  指定大图标
LVS_SORTASCENDING  对项目文本按照升序方式排序
LVS_SORTDESCENDING  项目文本按照降序方式排序
LVS_SINGLESEL  在一个时间内仅仅允许一个项被选中 。默认情况下一次可以选中多个项 。
LVS_SHOWSELALWAYS    总是显示选择项 即使CListCtrl控件失去焦点
LVS_OWNERDRAWFIXED   允许窗体拥有者重回控件。列表控件发送 WM_DRAWITEM 到每一个项 。 他不会发送的消息到每个项 theDRAWITEMSTRUCT包含了将要重会的列表项的一些数据
下面是扩展风格:
LVS_EX_FULLROWSELECT  可以整行都选择   只针对于report
LVS_EX_GRIDLINES   控件有网格线
LVS_EX_CHECKBOXES  列表项前面有个复选框 CheckBox 
上面这几个是常用的 还有很多扩展风格用到的时候 直接去源文件看定义。

下面这个函数可以获得控件的风格 或者扩展风格: 
LONG GetWindowLong(       
  HWND hWnd,  // handle to window
  int nIndex  // offset of value to retrieve
);
下面这个函数可以设置控件的风格 或者扩展风格: 
LONG SetWindowLong(
  HWND hWnd,       // handle to window
  int nIndex,      // offset of value to set
  LONG dwNewLong   // new value
);

 假设有一个指向CListCtrl对象的指针 那么我们修改他的风格:
         DWORD style=::GetWindowLong(c->m_hWnd,GWL_STYLE)  ;//获得控件的Style
 ::SetWindowLong(c->m_hWnd,GWL_STYLE,style|LVS_REPORT |LVS_NOLABELWRAP|LVS_EDITLABELS)   ; //修改风格为report和可以加入图标
 ::SetWindowLong(c->m_hWnd,GWL_STYLE,LVS_REPORT |LVS_NOLABELWRAP|style)   ;
 DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;  //新风格 网格和选中一行只支持report 
  c->SetExtendedStyle(styles) ;//设置扩展风格 其实在底层应该是调用了SetWindowLong进行风格的修改
插入列有2中方式 :可以通过位LVCOLUMN和直接插入文本
typedef struct _LVCOLUMN {
UINT mask;    //位掩码 指定结构体中的那几个成员是有效的 
int fmt;
int cx;
LPTSTR pszText;
int cchTextMax;
int iSubItem;
int iOrder;
int iImage;}
LVCOLUMN;

定义LVCOLUMN结构体并赋值,赋值后并且插入 具体去看看MSDN简单
LVCOLUMN lv1,lv2 ,lv3;
 lv1.mask=LVCF_FMT |LVCF_TEXT|LVCF_WIDTH  ;  //设置LVCOLUMN的位掩码
 lv1.pszText=_T("歌曲名字") ;//文本
 lv1.cx=100 ;  //列表宽是
 lv1.fmt=LVCFMT_LEFT  ;//文本居中显示
 lv2.mask=LVCF_FMT |LVCF_TEXT|LVCF_WIDTH  ;  //设置LVCOLUMN的位掩码
 lv2.pszText=_T("歌曲路径") ;//文本
 lv2.cx=nWidth-200 ;  //列表宽是
 lv2.fmt=LVCFMT_LEFT  ;//文本居中显示
 lv3.mask=LVCF_FMT |LVCF_TEXT|LVCF_WIDTH  ;  //设置LVCOLUMN的位掩码
 lv3.pszText=_T("歌曲长度") ;//文本
 lv3.cx=100 ;  //列表宽是
 lv3.fmt=LVCFMT_LEFT  ;//文本居中显示
 c->InsertColumn(1,&lv1) ;
 c->InsertColumn(3,&lv3) ;
 c->InsertColumn(2,&lv2) ;

插入项的时候要注意: 一定要先插入项,再设置项的文本。
 c->InsertItem(0,"ITEM1")  ;  //插入ITEM
 c->SetItemText(0,1,"subitem") ;//设置项目的文本 从1开始 因为0是项的索引      如果SubItem多的话那么依次往后加即可

处理CListCtrl控件时候常用到的消息:
NM_CLICK  当项目列表单击的时候发送  在程序中我们需要做相应的处理
NM_DBCLICK 当项目列表双击的时候发送 

但是我们要注意CListCtrl类中的2个模糊的函数 
POSITION GetFirstSelectedItemPosition( ) const;  //这个函数返回的是单击或者双击后  的位置   如果点击之处不在 项上面的话 那么 返回的 POSITION 是NULL  。  

如果返回的POSITION 不是NULL  那么调用
int GetNextSelectedItem( POSITION& pos ) const; //通过返回的POSITION 位置 来返回点击列表项的索引 。   

 

 

       
       

 

 

时间: 2024-10-27 19:25:43

VS2008下的CListCtrl控件的使用的相关文章

VS2008下,在控件-属性-某项上按F1,总打开“属性”窗口,有什么办法可以直接看到指定项的帮助?

问题描述 VS2008下,在控件-属性-某项上按F1,总打开"属性"窗口,有什么办法可以直接看到指定项的帮助? 解决方案 解决方案二:没有啊,我的打开帮助啊.你是不是改过enviorment,试一试resetsettingTools->Importandexportsettings->ResetAllSettings解决方案三:F1代码比较好让光标在代码处,比如Form,Button,Label什么的然后F1,然后在帮助上点属性一样的不是解决方案四:在右侧的控件属性某项按F

MFC父窗口控制子窗口CListCtrl控件刷新的问题

问题描述 MFC父窗口控制子窗口CListCtrl控件刷新的问题 目标:父窗口单击按钮,向子窗口发送一个消息:子窗口的消息处理函数中,调用列表显示函数来刷新列表数据. 我的代码: // 父窗口void CDlg4::OnButtonClick(){ CDlg43 *dlg = new CDlg43(); dlg->Create(IDD_DIALOG_43this); if (NULL == dlg) { AfxMessageBox(""failed""); d

checkbox-关于CListCtrl控件的添加CheckBox扩展功能

问题描述 关于CListCtrl控件的添加CheckBox扩展功能 最近在做一个小项目,想在自己的CXListCtrl类中实现单元格中可以有CheckBox.原本的一个风格只会实现第一列有CheckBox,其他列单元个要有CheckBox请问怎么实现?在CodeProject网上查到了一个XListCtrl控件,但是太复杂,不会引用到VC 6.0中,求大婶支招.我的邮箱wmg715@163.com 解决方案 1 建立测试工程 新建一个对话框工程,并添加一个CListCtrl控件,并关联一个成员变

c++-请教一个CListCtrl控件的一个问题

问题描述 请教一个CListCtrl控件的一个问题 list.SetExtendedStyle(list.GetExtendedStyle()|LVS_EX_FULLROWSELECT); 请问下CLISTCTRL控件的设置风格语句,如上所写和 list.SetExtendedStyle(LVS_EX_FULLROWSELECT)这样写有啥区别呀? 我运行结果看了看没啥区别呀? 解决方案 list.SetExtendedStyle(list.GetExtendedStyle()|LVS_EX_F

Android自定义控件实战——下拉刷新控件终结者:PullToRefreshLayout

转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38340701            说到下拉刷新控件,网上版本有很多,很多软件也都有下拉刷新功能.有一个叫XListView的,我看别人用过,没看过是咋实现的,看这名字估计是继承自ListView修改的,不过效果看起来挺丑的,也没什么扩展性,太单调了.看了QQ2014的列表下拉刷新,发现挺好看的,我喜欢,贴一下图看一下qq的下拉刷新效果:                 

网页图片下拉选择控件使用实例

控件|网页|下拉 上周五在大富翁上看到如何在网页的下拉列表中显示图片一文,便做了一个mark,准备用周末思考一下.谁知道昨天出去玩一天,今天来收到邮件,问题解决了. 不想看内容的,请下载rar文件.下面是转贴: 相信大家都见过一些软件里的图片下拉选择控件吧?喏,OICQ中就有.但网页上的你见过没有?小阳今天就为你推出你心怡已久的这个控件,下面演示中就是了!效果还可以吧?心动不如行动,我们来看下是怎么弄出来的. 我们先来看下做出这个控件需要解决哪些问题. 第一,图片下拉列表框是一个层,它在选择提示

导出CListCtrl控件到Excel文件

CListCtrl获得列的属性可以使用BOOL CListCtrl::GetColumn( int nCol, LVCOLUMN* pColumn ),nCol为需要获得获得属性值的列序号,pColumn 为 LVCOLUMN 结构体的指针.LVCOLUMN结构体中的 UINT mask 作为输入,决定返回哪些属性的值,如果 mask 的值包含 LVCF_TEXT ,则需要将字符串缓存的首地址指针置入结构体中的 LPTSTR pszText; 变量,缓存大小置入 int cchTextMax;

jquery下拉select控件操作方法分享

 这篇文章主要介绍了jquery下拉select控件操作方法分享(jquery操作select),需要的朋友可以参考下 JQuery获取和设置Select选项方法汇总如下:   代码:   代码如下: $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发 var checkText=$("#select_id").find("option:selected&quo

android-Android下拉刷新控件如何进行开发

问题描述 Android下拉刷新控件如何进行开发 如何开发一个下拉刷新控件,怎么用,需要哪些技术,现在回一些基本的自定义控件技术 想自己开发一个 解决方案 可以参照一些有名的开发者,比如廖虎秋.去github上看一些著名的库 解决方案二: 可以参照一些有名的开发者,比如廖虎秋.去github上看一些著名的库 解决方案三: 可以参照一些有名的开发者,比如廖虎秋.去github上看一些著名的库 解决方案四: Android中的通用下拉刷新控件Android 下拉刷新控件之ScrollView版本实现