十、MFC控件(二)

一、滑块控件

1、控件使用

(1)相关类

        CSliderCtrl类,父类为CWnd,封装了关于滑块控件的各种操作

(2)常见操作

        设置范围

                CSliderCtrl::SetRange

        设置位置

                CSliderCtrl::SetPos

        获取位置

                CSliderCtrl::GetPos

(3)消息

        当滑块的位置改变之后

                滑块控件发出WM_COMMAND消息(通知码 NM_CUSTOMDRAW)

(4)在工具箱中名称为:Slider Control

1、在项目中使用滑块控件

(1)使用类向导添加滑块控件绑定的控件类对象

(2)在对话框初始化函数设置滑块范围与位置

BOOL CMFCCtrl1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	ShowWindow(SW_MINIMIZE);

	// TODO: 在此添加额外的初始化代码
	m_slider.SetRange(0, 100);
	m_slider.SetPos(30);

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

(3)添加滑块消息处理函数,在处理函数中获取滑块位置

void CMFCCtrl1Dlg::OnCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	int nPos = m_slider.GetPos();
	CString str;
	str.Format("滑块位置:%d", nPos);

	this->SetWindowText(str);	//设置对话框标题

	*pResult = 0;
}

二、进度条控件

1、控件介绍

(1)相关类

        CProgressCtrl类,父类为CWnd,封装了关于进度条控件的操作

(2)常见操作

        设置范围

                CProgressCtrl::SetRange

        设置位置

                CProgressCtrl::SetPos

        获取位置

                CProgressCtrl::GetPos

(3)工具箱控件名称:Progress Control

2、在项目中使用

(1)使用类向导添加控件绑定控件类对象

(2)在对话框处理函数中设置进度条范围与位置

BOOL CMFCCtrl1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	ShowWindow(SW_MINIMIZE);

	// TODO: 在此添加额外的初始化代码
	m_slider.SetRange(0, 100);
	m_slider.SetPos(30);

	m_pro.SetRange(0, 100);
	m_pro.SetPos(50);

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

三、文件搜索类

1、文件搜索类介绍

(1)相关类

        CFileFind类,封装了关于文件遍历的操作

(2)常见操作

        开启文件查找(判断路径是否正确),成功返回TRUE,失败返回FALSE

                CFileFind::FindFile

        找到当前文件,返回下一个文件是否存在

                CFileFind::FindNextFind

        调用一些列GetXXX函数获取文件信息

                CFileFind::GetFileName / CFileFind::GetFilePath

        调用一系列IsXXX函数判断文件属性

                CFileFind::IsDorectory / CFileFind::IsDots(. / ..)

        关闭查找

                CFileFind::Close

2、创建项目调用文件搜索操作

(1)创建(Win32控制台)项目(MFCFileFind)

(2)编写程序

#include <afxwin.h>
#include <iostream>
using namespace std;

void Find(CString path)
{
	CString strPath = path;
	strPath+="/*.*";
	CFileFind find;	//文件搜索类对象
	BOOL bGoFind = find.FindFile(strPath);
	while (bGoFind)
	{
		bGoFind = find.FindNextFile();	//找到当前文件,将文件信息保存到find私有成员变量,使用成员函数可以访问
		if (find.IsDirectory())
		{
			cout<<"["<<find.GetFileName()<<"]"<<endl;
			if (! find.IsDots())	//不是	.或..
			{
				Find(find.GetFilePath());		//递归遍历
			}			
		}
		else
		{
			cout<<"Name: "<<find.GetFileName()<<endl;
		}
	}
	find.Close();
}

int main()
{
	Find("C:");
	return 0;
}

四、列表控件

1、控件介绍

(1)相关类

        CListCtrl类,父类为CWnd,封装了关于列表控件的操作

(2)风格

        图标(LVS_ICON),相当于文件夹中等图标

        小图标(LVS_SMALLICON),相当于文件夹小图标

        列表(LVS_LIST),相当于文件夹列表

        报表(LVS_REPORT),相当于文件夹详细信息

        修改风格

                CWnd::ModifStyle

(3)常见操作

        添加选项

                CListCtrl::InsertItem

        删除选项

                CListCtrl::CListCtrl::DeleteItem / CListCtrl::DeleteAllItem

        添加列

                CListCtrl::InsertColumn

        设置文本内容

                CListCtrl::SetItemText

        设置图像

                CListCtrl::SetImageList

        设置附加数据

                CListCtrl::SetItemData

        获取附加数据

                CListCtrl::GetItemData

(4)消息

        当列表被双击

                发出WM_COMMAND消息(通知码 NM_DBCLCK)        

(5)在工具箱名称:List Condtrol

2、在项目中使用

(1)创建对话框项目(MFCList)

(2)添加列表控件(从工具箱中拖拽 List Condtrol控件)

(3)添加下拉列表控件(Combo Box),设置为Drop List,用于选择列表控件的风格

(4)分别给列表和下拉列表添加绑定控件类对象

(5)在对话框初始化函数给下拉列表添加选项

	m_dropList.AddString("图标");
	m_dropList.AddString("小图标");
	m_dropList.AddString("列表");
	m_dropList.AddString("报表");
	m_dropList.SetCurSel(0);	//设置默认选项

(6)在下拉列表消息处理函数,修改列表风格

void CMFCListDlg::OnSelchangeCombo1()
{
	// TODO: 在此添加控件通知处理程序代码
	switch (m_dropList.GetCurSel())
	{
	case 0:
		{	//图标
			m_list.ModifyStyle(LVS_SMALLICON|LVS_LIST|LVS_REPORT, LVS_ICON);
		}
		break;
	case 1:
		{	//小图标
			m_list.ModifyStyle(LVS_ICON|LVS_LIST|LVS_REPORT, LVS_SMALLICON);
		}
		break;
	case 2:
		{	//列表
			m_list.ModifyStyle(LVS_SMALLICON|LVS_ICON|LVS_REPORT, LVS_LIST);
		}
		break;
	case 3:
		{	//报表
			m_list.ModifyStyle(LVS_SMALLICON|LVS_LIST|LVS_ICON, LVS_REPORT);
		}
		break;
	}
}

 (7)在对话框初始化函数添加选项,设置列表的报表风格的列

	//报表风格的列
	m_list.InsertColumn(0, "名称", LVCFMT_LEFT, 150);	//150为列宽
	m_list.InsertColumn(1, "修改日期", LVCFMT_LEFT, 150);
	m_list.InsertColumn(2, "类型", LVCFMT_LEFT, 150);
	m_list.InsertColumn(3, "大小", LVCFMT_LEFT, 150);
	//报表风格的经纬线
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);	//经纬线

	m_list.InsertItem(0, "目录", 0);
	m_list.InsertItem(1, "文件", 0);

(8)添加文本内容(报表风格,其他列的文本内容)

	//报表风格的列
	m_list.InsertColumn(0, "名称", LVCFMT_LEFT, 150);	//150为列宽
	m_list.InsertColumn(1, "修改日期", LVCFMT_LEFT, 150);
	m_list.InsertColumn(2, "类型", LVCFMT_LEFT, 150);
	m_list.InsertColumn(3, "大小", LVCFMT_LEFT, 150);
	//报表风格的经纬线
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);	//经纬线

	m_list.InsertItem(0, "目录", 0);
	m_list.SetItemText(0, 1, "2022.1.1");
	m_list.SetItemText(0, 2, "Dir");
	m_list.SetItemText(0, 3, "3M");

	m_list.InsertItem(1, "文件", 0);
	m_list.SetItemText(1, 1, "2022.2.2");
	m_list.SetItemText(1, 2, "FILE");
	m_list.SetItemText(1, 3, "13M");

 (9)添加bmp图片,给列表设置图像

	m_dropList.AddString("图标");
	m_dropList.AddString("小图标");
	m_dropList.AddString("列表");
	m_dropList.AddString("报表");
	m_dropList.SetCurSel(0);	//设置默认选项

	//报表风格的列
	m_list.InsertColumn(0, "名称", LVCFMT_LEFT, 150);	//150为列宽
	m_list.InsertColumn(1, "修改日期", LVCFMT_LEFT, 150);
	m_list.InsertColumn(2, "类型", LVCFMT_LEFT, 150);
	m_list.InsertColumn(3, "大小", LVCFMT_LEFT, 150);
	//报表风格的经纬线
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);	//经纬线

	CImageList* pImageList = new CImageList;
	pImageList->Create(IDB_BITMAP1, 24, 1, RGB(255,255,255));	//将IDB_BITMAP1以24列宽裁剪一个图片,去底色RGB(255,255,255)

	m_list.SetImageList(pImageList, LVSIL_NORMAL); //图像链表应用在列表空间的图标风格
	m_list.SetImageList(pImageList, LVSIL_SMALL); //图像链表应用在列表空间的其他风格

	m_list.InsertItem(0, "目录", 0);	//最后一个参数为pImageList的第几个元素
	m_list.SetItemText(0, 1, "2022.1.1");
	m_list.SetItemText(0, 2, "Dir");
	m_list.SetItemText(0, 3, "3M");

	m_list.InsertItem(1, "文件", 1);	//最后一个参数为pImageList的第几个元素
	m_list.SetItemText(1, 1, "2022.2.2");
	m_list.SetItemText(1, 2, "FILE");
	m_list.SetItemText(1, 3, "13M");

 (10)使用文件搜索类,实现列表添加文件

void CMFCListDlg::ShowFile(CString str)
{
	CString strPath = str;
	strPath+="/*.*";
	CFileFind find;	//文件搜索类对象
	BOOL bGoFind = find.FindFile(strPath);
	int n=0;
	while (bGoFind)
	{
		bGoFind = find.FindNextFile();	//找到当前文件,将文件信息保存到find私有成员变量,使用成员函数可以访问
		if (find.IsDirectory() && !find.IsDots())
		{
			m_list.InsertItem(n, find.GetFileName(), 0);	
		}
		else
		{
			m_list.InsertItem(n, find.GetFileName(), 1);	
		}
		n++;
	}
	find.Close();
}

 

 (11)使用类向导添加列表消息处理函数

void CMFCListDlg::OnDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	CString* pStrPath = (CString*)m_list.GetItemData(pNMItemActivate->iItem);	
	if (pStrPath->GetLength() > 0)
	{
		ShowFile(*pStrPath);
	}	
	*pResult = 0;
}
void CMFCListDlg::ShowFile(CString str)
{
	
	for (int i=0;i<m_list.GetItemCount();i++)
	{
		CString* pStrPath = (CString*)m_list.GetItemData(i);	
		if (NULL != pStrPath)
		{
			delete pStrPath;
		}
	}
	m_list.DeleteAllItems();
	
	CString strPath = str;
	strPath+="/*.*";
	CFileFind find;	//文件搜索类对象
	BOOL bGoFind = find.FindFile(strPath);
	int n=0;
	while (bGoFind)
	{
		bGoFind = find.FindNextFile();	//找到当前文件,将文件信息保存到find私有成员变量,使用成员函数可以访问
		if (find.IsDirectory() && !find.IsDots())
		{
			m_list.InsertItem(n, find.GetFileName(), 0);	
			CString *pStrPath = new CString;
			*pStrPath = (find.GetFilePath());
			m_list.SetItemData(n, (DWORD)pStrPath);
		}
		else if(!find.IsDots())
		{
			m_list.InsertItem(n, find.GetFileName(), 1);	
			CString *pStrPath = new CString;
			m_list.SetItemData(n, (DWORD)pStrPath);
		}
		n++;
	}
	find.Close();
}

五、树控件

1、控件介绍

(1)相关类

        CTreeCtrl类,父类为CWnd,封装了关于树控件的各种操作

(2)常见操作

        添加选项

                CTreeCtrl::InsertItem

        删除选项

                CTreeCtrl::DeleteItem / DeleteAllItem

        获取选择项

                CTreeCtrl::GetSelectedItem

        获取选项的文本内容

                CTreeCtrl::GetItemText

        设置选项的高度

                CTreeCtrl::

        设置选项的图像

                CTreeCtrl::SetImageList

(3)在工具箱中名称为Tree Control

2、在项目中使用控件

(1)添加对话框项目(MFCTree)

(2)添加树控件(从工具栏拖拽 Tree Control)

(3)使用类向导添加绑定控件类对象

(4)在对话框初始化函数添加选项

	HTREEITEM nRoot = m_tree.InsertItem("树控件1", 0, 0, NULL);
	m_tree.InsertItem("树控件1-1", 0, 0, nRoot);
	m_tree.InsertItem("树控件1-2", 0, 0, nRoot);
	m_tree.InsertItem("树控件1-3", 0, 0, nRoot);
	m_tree.InsertItem("树控件1-4", 0, 0, nRoot);

 (5)通过按钮删除选项

void CMFCTreeDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	m_tree.DeleteItem(m_tree.GetSelectedItem());
}

(6)通过按钮获取文本内容

void CMFCTreeDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	AfxMessageBox( m_tree.GetItemText(m_tree.GetSelectedItem()));
}

(7)添加bmp资源,设置图标

BOOL CMFCTreeDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	CImageList* pImageList = new CImageList;
	pImageList->Create(IDB_BITMAP1, 12, 1, RGB(255, 255, 255));
	m_tree.SetImageList(pImageList, LVSIL_NORMAL);
	
	HTREEITEM nRoot = m_tree.InsertItem("树控件1", 1, 2, NULL);	//被选中设置为2,没有选中为1
	m_tree.InsertItem("树控件1-1", 2, 3, nRoot);
	m_tree.InsertItem("树控件1-2", 2, 3, nRoot);
	m_tree.InsertItem("树控件1-3", 2, 3, nRoot);
	m_tree.InsertItem("树控件1-4", 2, 3, nRoot);
	m_tree.SetItemHeight(50);	//设置选择项高度


	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

程序源代码:https://download.csdn.net/download/liutit/86738821

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值