77范文网 - 专业文章范例文档资料分享平台

常用控件用法(2)

来源:网络收集 时间:2019-06-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

LVS_NOCOLUMNHEADER 用来确定在详细资料方式时不显示列表头; LVS_NOLABELWRAP 用来确定以单行方式显示图标的文本项; LVS_NOSCROLL 用来屏蔽滚动条;

LVS_NOSORTHEADER 用来确定列表头不能用作按钮功能; LVS_OWNERDRAWFIXED 在详细列表方式时允许自绘窗口; LVS_REPORT 用来确定以详细资料即报告方式显示; LVS_SHAREIMAGELISTS用来确定共享图像列表方式;

LVS_SHOWSELALWAYS 用来确定一直显示被选中表项方式; LVS_SINGLESEL 用来确定在某一时刻只能有一项被选中; LVS_SMALLICON 用来确定小图标显示方式;

LVS_SORTASCENDING 用来确定表项排序时是基于表项文本的升序方式; LVS_SORTDESCENDING 用来确定表项排序时是基于表项文本的降序方式; 3.2.2 列表控制的属性类

列表控制的属性类包括取得列表控制的背景色GetBkColor、设置列表控制的背景色SetBkColor、取得列表控制的图像列表 GetImageList、设置列表控制的图像列表SetImageList、取得列表项数目GetItemCount、取得列表控制的属性 GetItem、取得与表项相关的数据GetItemData、设置表项的属性SetItem、设置与表项相关的数值SetItemData、取得相关联的下一个表项GetNextItem、设置列表控制的文本颜色SetTextColor、取得列表控制的文本背景颜色GetTextBkColor、设置表项的最大数目SetItemCount和取得被选中表项的数目GetSelectedCount等。 3.2.3 列表控制的操作方法

列表控制的操作方法包括插入一个新的表项InsertItem、删除一个表项DeleteItem、排序表项SortItems、测试列表的位置 HitTest、重绘表项RedrawItems、插入一个表列InsertColumn、删除一个表列DeleteColumn、编辑一个表项文本 EditLabel和重绘一个表项DrawItem等。 3.3 列表控制的数据结构

列表控制中包含两个非常重要的数据结构LV_ITEM和LV_COLUMN。LV_ITEM用于定义列表控制的一个表项,LV_COLUMN用于定义列表控制的一个表列,其定义格式分别为: typedef struct _LV_ITEM { UINT mask; //结构成员屏蔽位 int iItem; //表项索引号

int iSubItem; //子表项索引号 UINT state; //表项状态

UINT stateMask; //状态有效性屏蔽位 LPTSTR pszText; //表项名文本 int cchTextMax; //表项名最大长度 int iImage; // 表项图标的索引号

LPARAM lParam; // 与表项相关的32位数 } LV_ITEM;

typedef struct _LV_COLUMN {

UINT mask; //结构成员有效性屏蔽位 int fmt; //表列对齐方式 int cx; //表列的象素宽度

LPTSTR pszText; //表列的表头名 int cchTextMax; //表列名的文本长度

int iSubItem; //与表列关联的子表项索引号 } LV_COLUMN;

其中fmt可以取如下值:

LVCFMT_CENTER 表列居中对齐 LVCFMT_LEFT 表列左对齐 3.4 列表控制的应用技巧示例

本文给出具体实例演示列表控制及前面的表头控制和图像列表的应用技巧。步骤如下: 1、通过“FILE->NEW->PROJECTS->MFC AppWizard(EXE)”建立名为VCLIST的工程,在建立过程中选择基于对话框(Dialog based)的应用;将对话框中的默认控件删除,并将所有对话框属性中的Language域设置为Chinese(P.R.C.),以使应用程序支持中文;

建立两个图标IDI_GJ和IDI_XS,用来表示图标的选中和非选中状态,对于每个图标都应建立32X32和16X16两种大小,以保证程序的需要; 3、在对话框窗口中设计组合框(Group Box),组合框中设置四个无线按钮(Radio)“大图标|小图标|列表|资料”,同时设置排序、删除和关闭三个控制按钮(Button),并在对话框中设置大小合适的列表控制(List Ctrl),其对应标识分别如下: 控制名称 标题名称 标识符号 列表控制 IDC_LISTCTRL 组合框 方式 IDC_STATIC

无线按钮 大图标 IDC_STDICON 小图标 IDC_SMLICON 列 表 IDC_LIST 资 料 IDC_REPORT 按钮 排 序 IDC_SORT 删 除 IDC_DEL 关 闭 IDOK

4、在设置无线按钮时,需要注意的是只有大图标的Group属性为选中状态,而其它无线按钮的状态均为默认值。 5、选中列表控制控件,选择“VIEW->ClassWizard->Memory Variables”,并利用IDC_ LISTCTRL引入成员变量,其变量类型为: 变量名 种类 变量类型

m_ListCtrl Control ClistCtrl

同时利用“MESSAGES MAP”为各无线按钮和命令按钮增加控制功能。 6、然后在包含文件和代码文件中分别加入如下代码: (1)在VCLISTDlg.h中增加数据结构和定义 typedef struct tagSPS { //定义结构 char szPm[10]; //品名 int Lx; //0-GJ1-XS char szSl[10]; //数量 char szDj[10]; //单价 char szJe[10]; //金额 } SPS;

int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort); (2)在VCLISTDlg.CPP中的起始处增加初始化数据和程序定义 //在文件开始处增加数据结构初始化

SPS Sps[]={//信息

{红梅,0,1000,30,30000}, {黄梅,0,1000,29,29000}, {绿梅,0,1000,28,28000}, {青梅,0,1000,27,27000}, {白梅,0,1000,31,31000}, {红梅,1,1000,30,30000}, {黄梅,1,1000,29,29000}, {绿梅,1,1000,28,28000}, {青梅,1,1000,27,27000}, {白梅,1,1000,31,31000}};

CImageList Cil1,Cil2;//大小图像列表

(3)在程序初始化处增加表头、图像和列表控制建立代码 BOOL CVCLISTDlg::OnInitDialog() {CDialog::OnInitDialog(); //其它代码

// TODO: Add extra initialization here此处增加代码 LV_ITEM lvitem; LV_COLUMN lvcol; int i,iPos,iItemNum;

CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();//创建图象列表 Cil1.Create(32,32,TRUE,2,2);

Cil1.Add(pApp->LoadIcon(IDI_GJ)); Cil1.Add(pApp->LoadIcon(IDI_XS)); Cil2.Create(16,16,TRUE,2,2);

Cil2.Add(pApp->LoadIcon(IDI_GJ));

Cil2.Add(pApp->LoadIcon(IDI_XS));//设置图象列表 m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);

m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);//向列表控制中添加表列 lvcol.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH; lvcol.fmt=LVCFMT_CENTER;//居中 i=0;

lvcol.pszText=品 名; lvcol.iSubItem=i; lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol); lvcol.pszText=数 量; lvcol.iSubItem=i; lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol); lvcol.pszText=单 价; lvcol.iSubItem=i; lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol);

lvcol.pszText=金 额; lvcol.iSubItem=i; lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol); //向列表控制中添加表项

iItemNum=sizeof(Sps)/sizeof(SPS); for(i=0;i

lvitem.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM; lvitem.iItem=i; lvitem.iSubItem=0;

lvitem.pszText=Sps[i].szPm; lvitem.iImage=Sps[i].Lx; lvitem.lParam=i;

iPos=m_ListCtrl.InsertItem(&lvitem);//返回表项插入后的索引号 lvitem.mask=LVIF_TEXT; lvitem.iItem=iPos; lvitem.iSubItem=1;

lvitem.pszText=Sps[i].szSl; m_ListCtrl.SetItem(&lvitem); lvitem.iSubItem=2;

lvitem.pszText=Sps[i].szDj; m_ListCtrl.SetItem(&lvitem); lvitem.iSubItem=3;

lvitem.pszText=Sps[i].szJe; m_ListCtrl.SetItem(&lvitem); }

CheckRadioButton(IDC_STDICON,IDC_REPORT,IDC_STDICON);

return TRUE; // return TRUE unless you set the focus to a control }

(4)完善列表显示方式代码

在利用Classwizard类向导创建各功能按钮显示功能函数之后,必须依次完善这些功能函数的代码,这些功能函数如下:

void CVCLISTDlg::OnStdicon()//设置大图标显示方式

{ // TODO: Add your control notification handler code here LONG lStyle;

lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型 lStyle&=~LVS_TYPEMASK; //清除显示方式位 lStyle|=LVS_ICON; //设置显示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型 }

void CVCLISTDlg::OnSmlicon() { // TODO: Add your control notification handler code here

LONG lStyle;

lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型

lStyle&=~LVS_TYPEMASK; //清除显示方式位 lStyle|=LVS_SMALLICON; //设置显示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型 }

void CVCLISTDlg::OnList() //设置列表显示方式

{ // TODO: Add your control notification handler code here LONG lStyle;

lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型 lStyle&=~LVS_TYPEMASK; //清除显示方式位 lStyle|=LVS_LIST; //设置显示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型 }

void CVCLISTDlg::OnReport() //详细资料显示方式

{ // TODO: Add your control notification handler code here LONG lStyle;

lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型 lStyle&=~LVS_TYPEMASK; //清除显示方式位 lStyle|=LVS_REPORT; //设置显示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型 }

(5)删除功能的实现

要实现删除功能,必须取得选中表项的数和表项总数,并且需要从后向前进行依次删除,其原因是每个表项被删除后,其后各表项的索引号均会发生递减变化,如果采取从前向后删除的方法,就会造成无法正常删除选中的表项,其功能代码如下: void CVCLISTDlg::OnDel() //删除按钮功能

{ // TODO: Add your control notification handler code here int i,iState;

int nItemSelected=m_ListCtrl.GetSelectedCount();//所选表项数 int nItemCount=m_ListCtrl.GetItemCount();//表项总数 if(nItemSelected<1) return; for(i=nItemCount-1;i>=0;i--){

iState=m_ListCtrl.GetItemState(i,LVIS_SELECTED); if(iState!=0) m_ListCtrl.DeleteItem(i); } }

(6)排序功能的实现

列表控制有一个特殊的功能,当以详细资料方式显示时,列表顶部的表头可以当作按钮来使用,这可以通过列表控制创建时的风格来控制。当鼠标点击列表头名称时,列表控制就会向其父窗口发送一个LNV_COLUMNCLICK消息,利用类导向中列表控制IDC_LISTCTRL对应的 LNV_COLUMNCLICK消息加入相应处理函数,就可将表列按照特定顺序进行排列。其函数使用方法见程序,其中iSort为排序的表列索引号, (PFNLVCOMPARE)CompareFunc为进行具体排序的回调函数,也就是说,通过鼠标点击表头实现的排序过程是由第三方开发的专用排序函数来实现的,排序函数只是实现表项的具体比较操作,而整个排序过程是由SortItemS属性通过不断调用这个函数来实现的。正常的排序过程是升序方式,通过调换排序函数中的参数

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库常用控件用法(2)在线全文阅读。

常用控件用法(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/658193.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: