MFC程序设计(二)文件类与常用基础控件

预备工作

我们以程序创建的主窗口基础进行讲解

首先我们设置以下对话框

编辑框绑定控件类型变量,名为m_Eidt,并添加点击事件。

第一行按钮绑定控件类型并添加变量m_Bn11,m_Bn12,m_Bn13,并对第一个按钮设置为群

第二行第一个按钮绑定值类型并添加int类型变量m_Bn21

第三行按钮绑定值类型并添加变量m_Check01,m_Check02,m_Check03

静态文本绑定变量m_Static

下拉框绑定控件变量m_Com,注意此处需要点击类向导,在虚函数OnInitDialog初始化代码中添加如下代码作为初始化:

m_Com.AddString(L"北京");
m_Com.AddString(L"上海");
m_Com.AddString(L"深圳");
m_Com.SetCurSel(0);//设置下拉框默认选项,此处是北京

进度条添加控件类型变量m_Progress

滑块添加控件类型变量m_Slider,进入OnInitDialog初始化代码中添加如下代码作为初始化:

m_Slider.SetRange(0, 100);//设置滑块刻度达到的百分比范围

m_Slider.SetPos(0);//获取初始刻度位置

m_Slider.SetTicFreq(1);//每次滑动前进的刻度数

菜单创建:直接手动设置一个菜单,然后在对话框属性中进行添加即可

列表绑定控件变量m_List,进入类向导选择右键点击消息

文件应用

文件读写

void CDemo02Dlg::OnBnClickedButton1()//文件读写
{
	CFile cFileObj; //创建文件对象
	cFileObj.Open(L"D:\\123.txt", CFile::modeReadWrite);//以可读可写的方式打开目标文件
	DWORD dwFileLength = cFileObj.GetLength();//获取文件长度
	char * szBuffer = new char[dwFileLength + 1];//申请文件大小的读写内存缓冲区
	memset(szBuffer, 0, dwFileLength + 1);//使读取文件以后,以00结尾
	cFileObj.Read(szBuffer, dwFileLength);//读取文件
	CString csBuffer;//创建字符串缓冲区
	csBuffer.Format(L"%S", szBuffer);//缓冲区接收文件内容
	m_Eidt.SetWindowTextW(csBuffer);//编辑框显示文件内容
	char * szWriteBuffer = "|||||||||||||||rkvir";//存储我们要写的文件内容
	cFileObj.Write(szWriteBuffer, strlen(szWriteBuffer));//将文件内容写入文件
	cFileObj.Flush();//文件内存刷新,而非显示刷新
	cFileObj.Close();//关闭文件
}

查询目标文件

void CDemo02Dlg::OnBnClickedButton1()//查询目标文件
{
	CString FileInfo;//存储文本缓冲区
	CFileFind finder; //文件查询类
	BOOL bRet = finder.FindFile(L"D:\\symbols(Win7x64)\\*.*");//查询指定文件,*.*表示查询指定目录下文件
	while (bRet)//遍历该目录下文件名称
	{
		bRet = finder.FindNextFileW();//查询下一个文件
		CString strName = finder.GetFileName();//接收文件名称
		CString strPath = finder.GetFilePath();//接收文件路径
		if (strName == L"acpi.pdb")//判断是否是目标文件
		{
			AfxMessageBox(strName);//查询到目标文件时弹窗
		}
		FileInfo += strName += "\r\n";//先strName+=后FileInfo+=
		FileInfo += strPath += "\r\n";//填充文本缓冲区 

	}
	m_Eidt.SetWindowTextW(FileInfo);//编辑框显示内容

新查询文件

void CDemo02Dlg::OnBnClickedButton1()//MFC新型查询文件
{
	//L"文件|*.txt|All Files|*.*||
	//文件|*.txt|:txt类型文件
	//All Files | *.* |:所有类型文件
	CFileDialog cFileDlg(TRUE, NULL, NULL, NULL, L"文件|*.txt|All Files|*.*||", this); //MFC新类型创建文件对话框,可以读取电脑中文件
	cFileDlg.DoModal();//显示文件对话框
	CString szPath = cFileDlg.GetPathName();//点击目标文件后,接收我们选择的文件路径
	m_Eidt.SetWindowTextW(szPath);//编辑框显示文件路径
}

此时我们可以像正常操作一样,选中我们的目标文件

多选按钮应用

判断是否选中按钮

void CDemo02Dlg::OnBnClickedButton2()
{
	if (m_Bn11.GetCheck())//获取第一个按钮绑定状态
	{
		AfxMessageBox(L"11");
	}
	else if (m_Bn12.GetCheck())
	{
		AfxMessageBox(L"12");
	}
	else if (m_Bn13.GetCheck())
	{
		AfxMessageBox(L"13");
	}
}

此时我们选中按钮123后,点击判断会弹出相应的窗口

根据按钮值弹窗

void CDemo02Dlg::OnBnClickedRadio4()//点击不同的按钮后,改变第二行第一个按钮变量值
{
	m_Bn21 = 1;
}
void CDemo02Dlg::OnBnClickedRadio5()
{
	m_Bn21 = 2;
}
void CDemo02Dlg::OnBnClickedRadio6()
{
	m_Bn21 = 3;
}
void CDemo02Dlg::OnBnClickedButton3()//根据选中按钮后变量值弹出不同窗口
{
	switch (m_Bn21)
	{
	case 1:
		AfxMessageBox(L"21");
		break;
	case 2:
		AfxMessageBox(L"22");
		break;
	case 3:
		AfxMessageBox(L"23");
		break;
	default:
		break;
	}

根据按钮状态弹窗

void CDemo02Dlg::OnBnClickedButton4()//根据选中按钮的状态弹出不同窗口
{
	if (m_Check01.GetCheck())
	{
		AfxMessageBox(L"11");
	}
	if (m_Check02.GetCheck())
	{
		AfxMessageBox(L"12");
	}
	if (m_Check03.GetCheck())
	{
		AfxMessageBox(L"13");
	}
}

点击按钮修改文本

void CDemo02Dlg::OnBnClickedButton5()//点击按钮修改静态文本
{
	HWND hStatic = ::GetDlgItem(m_hWnd, IDC_STATIC);
	::SetWindowText(hStatic,L"rkvir");
}
void CDemo02Dlg::OnBnClickedButton6()//点击选项后,获取下拉框中的文本
{
	int Cur = m_Com.GetCurSel();//获取下拉框选项的序号
	CString csTemp;
	csTemp.Format(L"%d", Cur);//存储文本至缓冲区
	AfxMessageBox(csTemp);/弹窗获取到的内容
}

点击按钮获取下拉框文本

void CDemo02Dlg::OnBnClickedButton6()//点击选项后,获取下拉框中的文本
{
	int Cur = m_Com.GetCurSel();//获取下拉框选项的序号
	CString csTemp;
	csTemp.Format(L"%d", Cur);//存储文本至缓冲区
	AfxMessageBox(csTemp);/弹窗获取到的内容
}

滑块与进度条

void CDemo02Dlg::OnBnClickedButton7()
{
	const int nMin = 0;
	const int nMax = 100000;设置进度条小值和最大值
	m_Progress.SetRange32(nMin, nMax);/设置进度条范围
	for (size_t i = nMin; i < nMax; i++)//加载进度条
	{
		m_Progress.SetPos(i);//进度条当前位置
	}
}


void CDemo02Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)//滑块和进度条绑定
{
	int nID = pScrollBar->GetDlgCtrlID();//获取滑块ID
	if (IDC_SLIDER1 == nID) //该消息是全局消息,因此需要进行判断选中的滑块
	{
		int Pos = m_Slider.GetPos();//获取滑块当前刻度
		m_Progress.SetPos(Pos);//设置进度条为滑块的刻度位置
	}
	CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}

菜单应用

点击菜单项弹窗

void CDemo02Dlg::On13()
{
	AfxMessageBox(L"Msg");
}

右键菜单

void CDemo02Dlg::OnRclickList1(NMHDR *pNMHDR, LRESULT *pResult)//右键点击列表
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	POINT pt = { 0 };//获取点击位置
	GetCursorPos(&pt);//存储点击位置
	HMENU hMenu = LoadMenu((HINSTANCE)GetWindowLongPtr(m_hWnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_MENU2));//加载IDR_MENU2菜单
	HMENU hSubMenu = GetSubMenu(hMenu, NULL);//获取菜单句柄
	TrackPopupMenu(hSubMenu, TPM_CENTERALIGN, pt.x, pt.y, 0, m_hWnd, NULL);//鼠标点击位置弹出菜单
	*pResult = 0;
}

点击右键菜单弹窗


void CDemo02Dlg::On134()//对菜单选项1下面的3进行应用
{
	// TODO: 在此添加命令处理程序代码
	AfxMessageBox(L"Msg");//点击时弹窗
}

作业

使用MFC搜索D盘获取指定文件并且读取到程序内,显示在Edit上

CString RealFilePath = L"0";
CString FileFind(CString FilePath, CString FileName)
{
	CFileFind finder;
	FilePath = FilePath + L"\\*.*";
	BOOL bRet = finder.FindFile(FilePath);
	while (bRet)
	{
		bRet = finder.FindNextFileW();
		if (finder.IsDots())//当遍历到特殊目录时跳过本次循环
		{
			continue;
		}
		CString strName = finder.GetFileName();
		CString strPath = finder.GetFilePath();
		if (finder.IsDirectory())//当目标文件是目录时
		{
			FileFind(strPath, FileName);
		}
		if (strName == FileName)
		{
			RealFilePath = strPath;
		}
	}
	return RealFilePath;
}

void CMFCApplication2Dlg::OnBnClickedButton1()
{
	CString FilePath = FileFind(L"D:", L"QQ浏览器截图20240814104659.png");
	m_Edit.SetWindowTextW(FilePath);
}


 

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值