ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

06. 基本控件(下)

2022-06-19 22:33:44  阅读:117  来源: 互联网

标签:基本 控件 列表框 06 ListInfo str combo InsertString


基本控件(下)

列表框控件

  • list box
  • 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选中的项会高亮显示。
  • 列表框可分为:
    1. 单选列表框:一次只能选择一个列表框。
    2. 多选列表框:可以同时选择多个列表框。

列表框示例

  1. 创建一个mfc的基于对话框工程。

  2. 在资源视图中,找到对话框,在对话框界面上点击右键,修改属性。

  3. 然后在工具箱里面,找到“list box”,拖动一个列表框到主对话框的面板。

  4. 再在工具箱里面,拖动一个“Group Box”,把刚刚的"list Box"包围起来。然后把“Group Box”的 caption修改为:“世界著名IT公司”。

  5. 修改ID,添加变量。

  6. 接下来是初始化这个控件。

    //在列表的指定位置插入一项字符串
    m_ListBox.InsertString(0, _T("微软公司"));//索引,字符串
    m_ListBox.InsertString(0,_T("C语言"));//在某个位置插入字符串
    //m_ListBox.AddString(_T("C++"));//尾插,但是索引不明确,因此不建议使用
    
  7. 继续添加。

    m_ListBox.InsertString(0,_T("C语言"));//在某个位置插入字符串
    //m_ListBox.AddString(_T("C++"));//尾插,但是索引不明确,因此不建议使用
    m_ListBox.InsertString(1, _T("C++"));
    m_ListBox.InsertString(2, _T("数据结构"));
    m_ListBox.InsertString(3, _T("win32"));
    m_ListBox.InsertString(4, _T("数据库"));
    m_ListBox.InsertString(5, _T("Qt"));
    
    
  8. 如需要把这些字符串取出来,就是鼠标点中某个字符串,就要得到该字符串。 为“list box”控件。生成一个消息处理函数。

  9. 在该函数中书写代码:

    void Cclass06Dlg::OnBnClickedButton1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	int index = m_ListBox.GetCurSel();//获取目前所选的基于0的下标
    	CString str;
    	if (index != -1) {//如果没获取到下标(未选中任何值),GetCurSel()会返回-1
            m_ListBox.GetText(index,str);//将index下的内容放入CString的变量中
            MessageBox(str,L"提示",0);
    	}
    }
    

组合框控件

  • combo box

  • 组合框其实就是把一个编辑框和一个列表框组合到了一起。

  • 分为三种:

    1. 简易(simple)组合框 :不可展开
    2. 下拉式(dropdown)组合框 : 可展开可编辑的组合框
    3. 下拉列表式(drop list)组合框 : 可展开不可编辑的组合框

组合框示例

  1. 拖入一个”静态文本“,取名为:”你的毕业学校:“。然后再拖入一个”combo box“,修改该”combo box“的id。

  2. 为”combo box“这个控件添加变量。

  3. 给这个控件去做一些初始化,提供一些字符串,给用户去选择。(和列表框一样)

    m_combo.InsertString(0, _T("C语言"));//在某个位置插入字符串
    //m_combo.AddString(_T("C++"));//尾插,但是索引不明确,因此不建议使用
    m_combo.InsertString(1, _T("C++"));
    m_combo.InsertString(2, _T("数据结构"));
    m_combo.InsertString(3, _T("win32"));
    m_combo.InsertString(4, _T("数据库"));
    m_combo.InsertString(5, _T("Qt"));
    
  4. 如想设置默认值,可以在初始化后面加上一句

    m_combo.SetCurSel(0);//设置下标为0对应的是默认的字符串
    
  5. 想得到用户的选择,生成"Combo box"控件处理函数。(和列表框相似)

    void Cclass06Dlg::OnBnClickedButton2()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	int index = m_combo.GetCurSel();//获取目前所选的基于0的下标
    	CString str;
    	if (index != -1) {
    		m_combo.GetLBText(index, str);//将index下的内容放入CString的变量中,与列表框有些差异
    		MessageBox(str, L"提示", 0);
    	}
    }
    
  6. 接下来,一个光标资源(.cur)文件导入。

  7. 为消息”WM_SETCURSOR“添加处理函数:

    //加载资源中的.cur光标
    HCURSOR hCursor = LoadCursor(AfxGetApp()->m_hInstance,
    MAKEINTRESOURCE(IDC_CURSOR1));
    ::SetCursor(hCursor);
    return true;//一定要注释掉系统写的,否则将不会被改变
    //return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
    

列表视图控件

  • list control
  • 列表视图控件,能够把任何字符串内容以列表的方式显示出来,这种显示方式的特点是整洁、直观。在实现应用中能为用户带来方便。
  • 该控件是对前面讲到的列表框控件"list box"的改进和延伸。
  • 列表视图控件的列表项一般有图标(icon)和标签(label)两部分。
  • 图标是对列表项图形描述。标签是文字描述。
  • 当然列表项可以只包含图标或只包含标签。

列表视图控件示例

  1. 拖入一个”list control“控件。修改 属性 -> 视图 ”View“为”report“(report报表最常用,),修改ID。 第0列只能设置左对齐或者右对齐,之后的才可以主动调整

  2. 拖入一个”静态文本“,修改名字:”你想了解的大学:“。拖入”edit control“,来用显示用户在list control中选择后的字符串。修改ID

  3. 进行初始化,在初始化之前,先给这个控件绑定一个变量。

  4. 在初始化函数中加上代码:

    m_ListInfo.SetExtendedStyle(m_ListInfo.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    CRect rect;//用来获取窗口大小
    m_ListInfo.GetClientRect(&rect);
    m_ListInfo.InsertColumn(0, L"排名", LVCFMT_CENTER, rect.Width() / 3, 0);
    m_ListInfo.InsertColumn(1, L"名称", LVCFMT_CENTER, rect.Width() / 3, 0);
    m_ListInfo.InsertColumn(2, L"国家", LVCFMT_CENTER, rect.Width() / 3, 0);
    
    
    m_ListInfo.InsertItem(0, _T("1"));
    m_ListInfo.SetItemText(0, 1, _T("哈佛大学"));//主项的第几项,第几个描述,内容
    m_ListInfo.SetItemText(0, 2, _T("美国"));//主项的第几项,第几个描述,内容
    m_ListInfo.InsertItem(1, _T("2"));
    m_ListInfo.SetItemText(1, 1, _T("清华"));
    m_ListInfo.SetItemText(1, 2, _T("中国"));
    m_ListInfo.InsertItem(2, _T("3"));
    m_ListInfo.SetItemText(2, 1, _T("北大"));
    m_ListInfo.SetItemText(2, 2, _T("中国"));
    m_ListInfo.InsertItem(3, _T("4"));
    m_ListInfo.SetItemText(3, 1, _T("剑桥"));
    m_ListInfo.SetItemText(3, 2, _T("英国"));
    m_ListInfo.InsertItem(4, _T("5"));
    m_ListInfo.SetItemText(4, 1, _T("复旦"));
    m_ListInfo.SetItemText(4, 2, _T("中国"));
    
  5. 当用户用鼠标点击某一条时,需要把这条的数据字符串显示到下方的"IDC_STATIC1"上面。所以给”list control“添加事件处理函数:

    void Cclass06Dlg::OnLvnItemchangedList2(NMHDR* pNMHDR, LRESULT* pResult)
    {
    	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    	// TODO: 在此添加控件通知处理程序代码
    	CString str;
    	if (-1 != pNMLV->iItem) {
    		str = L"排名:";
    		str += m_ListInfo.GetItemText(pNMLV->iItem, 0);
    		str += L"    学校:";
    		str += m_ListInfo.GetItemText(pNMLV->iItem, 1);
    		str += L"    国家:";
    		str += m_ListInfo.GetItemText(pNMLV->iItem, 2);
    		SetDlgItemText(IDC_STATIC1, str);
    	}
    
    	*pResult = 0;
    }
    

树形控件

  • tree control

  • 树形控件在windows系统中是很常见的,比如:资源管理器左侧的窗口中就有用来显示目录的树形视 图。

  • 树形视图中以分层结构显示数据,每层的缩进不同,层次越低缩进越多。

  • 树形控件的节点一般都由以下两部分组成:

    1. 标签。用来描述该节点
    2. 图标。用图标来表示该节点
  • 树形控件在插入新节点时会稍麻烦,之前的列表框在插入时调用“AddString”成员函数即可。在树形控件 中则需要指定新节点与已有节点的关系。

  • 树形控件与列表视图控件一样,可以在每一个节点的左边加入图标。

树形控件示例

  1. 拖入一个“tree control”。修改好ID

    3个属性中必需操作:行在根处true、具有行true、具有按钮true

  2. 为这个“tree control”绑定一个变量。

  3. 初始化:

    CTreeCtrl m_tree;//属性控件
    CImageList m_pImageList;//图片容器
    
    m_pImageList.Create(16, 16, ILC_COLOR32, 2, 2);
    CBitmap tempBitmap;
    tempBitmap.LoadBitmapW(IDB_BITMAP1);
    m_pImageList.Add(tempBitmap, RGB(0, 0, 0));
    tempBitmap.DeleteObject();
    tempBitmap.LoadBitmapW(IDB_BITMAP2);
    m_pImageList.Add(tempBitmap, RGB(0, 0, 0));
    tempBitmap.DeleteObject();
    
    m_tree.SetImageList(&m_pImageList, LVSIL_NORMAL);
    
    HTREEITEM hRoot = m_tree.InsertItem(_T("中国"), 
                                        0,//没选中的状态
                                        1,//选中的状态
                                        TVI_ROOT);//设置根节点
    
    HTREEITEM h1 = m_tree.InsertItem(_T("湖南省"), 0, 1, hRoot);
    HTREEITEM h2 = m_tree.InsertItem(_T("北京市"), 0, 1, hRoot);
    
    HTREEITEM h1_1 = m_tree.InsertItem(_T("长沙市"), 0, 1, h1);
    HTREEITEM h1_2 = m_tree.InsertItem(_T("株洲市"), 0, 1, h2);
    
    HTREEITEM h1_1 = m_tree.InsertItem(_T("朝阳区"), 0, 1, h1);
    HTREEITEM h1_2 = m_tree.InsertItem(_T("东城区"), 0, 1, h2);
    

标签:基本,控件,列表框,06,ListInfo,str,combo,InsertString
来源: https://www.cnblogs.com/WZ-1120232314/p/16391651.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有