一、Listbox Control(列表框)
为控件添加一个变量:如AA
1、在列表框中显示数据
(1)、属性配置
将属性Selection配置为 Multiple(设置为多行列表框); //Signle 设置为单行列表框
(2)、基本操作
1)、置列表框的最大宽度
AA.SetColumnWidth(len) //int len; 一般放在初始化的位置,len=m*10;m为列表框显示的数字的最大个数
2)、数据显示
AA.AddString(_T("gf")); //默认显示在第一行
AA.AddString(_T("gf")); //默认显示在第二行
3)、清除数据
AA.DeleteString(n);//删除第n+1行的所有数据,
//删除后第n+1行后原第n+1行后的数据依次往上移一行
//该句必须放在第n+1行后的任意一行才有效,一般放在最后面
AA.ResetContent(); //清除整个列表框中的内容
4)、指定位置插入数据
AA.InsertString(n,str); //将字符串str插入到第n+1行中,特别注意插入到最后一行时n=-1;
例:
AA.AddString(_T("1gfyv")); //第一行
AA.AddString(_T("2gf")); //第二行
AA.AddString(_T("3sd")); //第三行
AA.DeleteString(0); //删除第一行内容
AA.InsertString(0,str); //将str插入到第1行
二、
List Control
为控件添加一个变量:如AA
1、属性配置:view
Report 报表样式
List 列表样式
Lcon 图标
Small lcon 小图标
1、用软件方法设置风格
LONG lStyle;
lStyle = GetWindowLong(AA.m_hWnd, GWL_STYLE);//获取当前窗口style
lStyle |= LVS_REPORT; //LVS_ICON/LVS_REPORT/LVS_SMALLICON/LVS_LIST
SetWindowLong(AA.m_hWnd, GWL_STYLE, lStyle);//设置style
2、属性View配置为Report风格时的操作
1)、设置控件的扩展风格
常用风格:
LVS_EX_GRIDLINES //绘制表格 ,只适用与report风格
LVS_EX_CHECKBOXES //带复选框
LVS_EX_TRACKSELECT //自动换行
LVS_EX_FULLROWSELECT //选择整行 ,只适用与report风格
LVS_EX_ONECLICKACTIVATE //单击激活
LVS_EX_TWOCLICKACTIVATE //双击激活
LVS_EX_FLATSB //扁平滚动条
LVS_EX_MULTIWORKAREAS //多工作区
设置风格:
DWORD dwStyle = AA.GetExtendedStyle();//获取控件当前的风格
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮
dwStyle |= LVS_EX_GRIDLINES; //网格线
AA.SetExtendedStyle(dwStyle); //设置扩展风格
AA.SetBkColor(RGB(255, 0, 0)); //设置背景色
2)建立标题栏
//L:列数,L=0时为第1列,NAME:标题名称,W为每一列的宽度,
AA.InsertColumn(L, "NAME", LVCFMT_LEFT, W);
//L=1,为第2列
AA.InsertColumn(L, "ID", LVCFMT_LEFT,W);
//L=2,为第3列
AA.InsertColumn(L, "School", LVCFMT_LEFT,W);
3)为该标题栏添加相应内容
//插入第n+1行,n=0,即显示在除标题栏的第一行,name默认显示在NAME下,即显示在第1列下
int nRow = AA.InsertItem(n, "name");
//设置第m+1列数据,m=1时,14060222显示在ID下,即显示在第2列下
AA.SetItemText(nRow, m, "14060222");
//s=2时,浙大显示在School下,即显示在第3列下
AA.SetItemText(nRow, s, "浙大");
4)、删除
AA.DeleteItem(N); //删除第N+1行的数据
//删除复选框选中的项
if(AA.GetCheck(N)){//删除第N+1行的数据
AA.DeleteItem(N);
}
//删除选中的整行
if(AA.GetSelectedCount()> 0){ //检索控件中选择项的数目
POSITION pos = AA.GetFirstSelectedItemPosition();//获得选择的第一项的位置
while (pos != NULL) {
int del = AA.GetNextSelectedItem(pos);//获得选中的基于pos的下一项
AA.DeleteItem(del); //删除该项
}
}
5)、使List Control可编辑
添加事件处理程序:
消息类型为:NM_CLOCK(单击) NM_DBLCLK(双击)
void XXXXDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
if (pNMItemActivate->iItem != -1){
.......
}
*pResult = 0;
}
三、Tree Control(树形控件)
为控件添加一个变量:如AA
1、风格设置
1)、常见风格:
TVS_DISABLEDRAGDROP //禁止树形控件发送TVN_BEGINDRAG通知消息,即不支持拖动操作
TVS_EDITLABELS //用户可以编辑节点的标签文本
TVS_HASBUTTONS //显示带有"+"或"-"的小方框来表示某项能否被展开或已展开
TVS_HASLINES //在父节点与子节点间连线以更清晰地显示树的结构
TVS_LINESATROOT //在根节点处连线
TVS_SHOWSELALWAYS //即使控件失去输入焦点,仍显示出项的选择状态
// 动态创建树形控件时,除了能够指定上述风格的组合外,一般还要指定WS_CHILD和WS_VISIBLE风格。
2)、设置风格
AA.ModifyStyle(NULL, TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT);
2、常见成员函数
1)获取树形控件中节点的数量。
UINT GetCount( ) const;
2)获取树形控件中某个指定节点的附加32位数据。
hItem为指定的树节点的句柄。
DWORD_PTR GetItemData(HTREEITEM hItem) const;
3)为树形控件中某个指定节点设置附加的32位数据。
hItem为指定的树节点的句柄,
dwData为要设置的32位数据。
BOOL SetItemData(HTREEITEM hItem,DWORD_PTR dwData);
4)获取树形控件中某个指定节点的标签文本。
hItem为指定的树节点的句柄。返回值是包含标签文本的字符串。
CString GetItemText(HTREEITEM hItem) const;
5)为树形控件中某个指定节点设置标签文本。
hItem为指定的树节点的句柄,
lpszItem为包含标签文本的字符串的指针。
BOOL SetItemText(HTREEITEM hItem,LPCTSTR lpszItem);
6)获取树形控件中某个指定节点的下一个兄弟节点。
hItem为指定的树节点的句柄。返回值是下一个兄弟节点的句柄。
HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const;
7)获取树形控件中某个指定节点的上一个兄弟节点。
hItem为指定的树节点的句柄。返回值是上一个兄弟节点的句柄。
HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const;
8)获取树形控件中某个指定节点的父节点。
hItem为指定的树节点的句柄。返回值是父节点的句柄。
HTREEITEM GetParentItem(HTREEITEM hItem) const;
9)获取树形控件根节点的句柄。
HTREEITEM GetRootItem( ) const;
10)获取树形控件当前选中节点的句柄。
HTREEITEM GetSelectedItem( ) const;
11)删除树形控件中的所有节点。删除成功则返回TRUE,否则返回FALSE。
BOOL DeleteAllItems( );
12)删除树形控件中的某个节点。
hItem为要删除的节点的句柄。删除成功则返回TRUE,否则返回FALSE。
BOOL DeleteItem(HTREEITEM hItem);
13)在树形控件中插入一个新节点。
lpszItem为新节点的标签文本字符串的指针
nImage为新节点的图标在树形控件图像序列中的索引
nSelectedImage为新节点被选中时的图标在图像序列中的索引
hParent为插入节点的父节点的句柄
hInsertAfter为新节点的前一个节点的句柄,即新节点将被插入到hInsertAfter节点之后
HTREEITEM InsertItem(LPCTSTR lpszItem,int nImage,int nSelectedImage,HTREEITEM hParent = TVI_ROOT,HTREEITEM hInsertAfter = TVI_LAST);
14)选中指定的树节点。
hItem为要选择的节点的句柄。若成功则返回TRUE,否则返回FALSE
BOOL SelectItem(HTREEITEM hItem);
15)为树的各个结点添加图标。
pImageList为指向图标序列类CImageList的对象的指针,若为NULL则删除树形控件的所有图像。
nImageListType指定图像序列的类型,可以是TVSIL_NORMAL(普通图像序列)或TVSIL_STATE(状态图像序列,用图像表示节点的状态)。
CImageList* SetImageList(CImageList * pImageList,int nImageListType);
3、实例
1)、添加一个Tree Control控件
为其添加一个变量TreeMess
2)、属性设置
属性Has Buttons、Has Lines和Lines At Root都设为True,
为了在鼠标划过某个节点时显示提示信息还需要将Info Tip属性设为True。
3)、导入需要为树形控件的节点添加的图标
(1)准备32x32的Icon图标多张,保存到工程的res目录下。
(2)导入图标:
资源视图->Icon(鼠标右击)->添加资源->导入->找到Icon图标导入即可
(3)为图标添加一个变量CImageList ImageList;
4)实现
(1)、初始化:添加图标和结点
BOOL XXXX::OnInitDialog()
{
CDialogEx::OnInitDialog();
HTREEITEM System; // 树的根节点的句柄
HTREEITEM hSubItem1; // 可表示任一分类节点的句柄
HTREEITEM hSubItem2; // 可表示任一文章节点的句柄
HTREEITEM Other;
// 加载三个图标,并将它们的句柄保存到数组
HIcon[0] = theApp.LoadIcon(IDI_WEB_ICON);
HIcon[1] = theApp.LoadIcon(IDI_CATALOG_ICON);
HIcon[2] = theApp.LoadIcon(IDI_ARTICLE_ICON);
ImageList.Create(32, 32, ILC_COLOR32, 3, 3); // 创建图像序列CImageList对象
for (int i = 0; i<3; i++){ // 将三个图标添加到图像序列
ImageList.Add(HIcon[i]);
}
TreeMess.SetImageList(&ImageList, TVSIL_NORMAL); // 为树形控件设置图像序列
//TreeMess.ModifyStyle(NULL, TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT);
System = TreeMess.InsertItem("Systems", 0, 0); //System就是节点的标题
hSubItem1 = TreeMess.InsertItem("Me", 1, 1, System, TVI_LAST);//在System下添加子结点Me
TreeMess.SetItemData(hSubItem1, 1); // 为“Me”节点添加附加的编号数据,在鼠标划过该节点时显示
hSubItem2 = TreeMess.InsertItem("Host", 1, 1, System, TVI_LAST); //在System下添加子结点Host
TreeMess.SetItemData(hSubItem2, 2); // 为“Host”节点添加附加的编号数据,在鼠标划过该节点时显示
Other = TreeMess.InsertItem("Item", 2, 2, hSubItem1, TVI_LAST); //在Me下添加子结点Item
TreeMess.SetItemData(Other, 3); // 为“Item”节点添加附加的编号数据,在鼠标划过该节点时显示
Other = TreeMess.InsertItem("Host1", 2, 2, hSubItem2, TVI_LAST); //在Host下添加子结点Host1
TreeMess.SetItemData(Other, 4);// 为“Host1”节点添加附加的编号数据,在鼠标划过该节点时显示
}
(2)、添加结点点击的消息响应函数消息类型为:TVN_SELCHANGED
void XXXX::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CString StrText; // 树节点的标签文本字符串
HTREEITEM HItem = TreeMess.GetSelectedItem();// 获取当前选中节点的句柄
StrText = TreeMess.GetItemText(HItem);// 获取选中节点的标签文本字符串
*pResult = 0;
}
(3)、鼠标划过除根节点外的某个树节点时,显示相应的提示信息
消息类型:TVN_GETINFOTIP
void XXXX::OnTvnGetInfoTipTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMTVGETINFOTIP>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
// 将传入的pNMHDR转换为NMTVGETINFOTIP指针类型
NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR;
HTREEITEM hRoot = TreeMess.GetRootItem(); // 获取树的根节点
CString StrText; // 每个树节点的提示信息
if (pTVTipInfo->hItem == hRoot)
{
StrText = _T("");// 如果鼠标划过的节点是根节点,则提示信息为空
}
else{ // 如果鼠标划过的节点不是根节点,则将该节点的附加32位数据格式化为字符串
StrText.Format(_T("%d"), pTVTipInfo->lParam);
}
// 将strText字符串拷贝到pTVTipInfo结构体变量的pszText成员中,这样就能显示内容为strText的提示信息
pTVTipInfo->pszText = CString_to_Char(StrText); //CString 转化为Char* 并显示提示信息
}
//CString 转化为Char* 并显示提示信息char *
char* CString_to_Char(CString str)
{
char *ptr;
#ifdef _UNICODE LONG len;
len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
ptr = new char[len + 1];
memset(ptr, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, str, -1, ptr, len + 1, NULL, NULL);
#else
ptr = new char[str.GetAllocLength() + 1];
sprintf(ptr, _T("%s"), str);
#endif
return ptr;
}