MFC中基础控件的简单使用(二)

一、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;
}






  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值