2024-03-03 c++

🌸 MFC进度条控件 | Progress Control

1。新建MFC项目(基于对话框、静态库)
2。添加控件,删除初始的3个多余控件
加1个progress control,修改其marquee为true,添加变量:变量名为test_progress。
在这里插入图片描述
加2个按钮,修改caption为START,STOP。双击按钮添加程序(或者右键START按钮,添加事件处理程序)
在这里插入图片描述

按钮控件可以接收的消息类型包括:
在这里插入图片描述
☑ BN_CLICKED 当用户点击按钮时发送的消息,单击。
☑ BN_DUBLECLICKED 当用户点击按钮时发送的消息,双击。
☑ BN_KILLFOCUS 按钮失去了输入焦点。
☑ BN_SETFOCUS 钮获得输入焦点。
☑ BCN_DROPDOWN
在这里插入图片描述
☑ BCN_HOTITEMCHANGE 高亮条目被改变。当鼠标进入或离开此按钮空间区域时发生该事件消息。
☑ NM_GETCUSTOMSFLITRECT
☑ NM_CUSTOMDRAW
☑ NM_THEMECHANCED 主题被改变。

3。添加代码

双击按钮1(按钮1 start,2 stop),添加代码:

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	test_progress.ShowWindow(true);/*进度条的可见性true*/
	//test_progress.ModifyStyle(NULL, WS_VISIBLE);
}

同理添加按钮2的代码

void CMFCApplication1Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	test_progress.ShowWindow(false);/*进度条的可见性false*/
	//test_progress.ShowWindow(true);/*进度条可见*/
	test_progress.ModifyStyle(WS_VISIBLE, NULL);
}

进度条的代码

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

	// 将“关于...”菜单项添加到系统菜单中。
	
	/*...*/
	// TODO: 在此添加额外的初始化代码
	test_progress.SetMarquee(true, 1000);//设置进度条的速度,数值越大移动越慢
	
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

在这里插入图片描述

4。运行
运行结果:
在这里插入图片描述
在这里插入图片描述


🌸 MFC选择框控件 | Check Box

其他同上,加一个check box控件,修改caption为显示进度条
双击check box,添加代码

void CMFCApplication2Dlg::OnBnClickedCheck1()
{
	// TODO: 在此添加控件通知处理程序代码
	BOOL bChecked = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck(); //把复选框选中状态传递给bChecked
	if (bChecked) //复选框被选中
		test_progress.ModifyStyle(NULL, WS_VISIBLE);//进度条可见
	else //复选框未被选中
		test_progress.ModifyStyle(WS_VISIBLE, NULL);//进度条不可见
	Invalidate(); //重绘窗口
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🌸 MFC滑动块控件 | Slider Control

1。新建MFC项目(基于对话框、静态库)
2。添加控件,删除初始的3个多余控件
加1个static text
加1个滑动块slider control,添加变量test_slider
3。双击滑块添加代码

void CMFCApplication7Dlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	int pos = test_slider.GetPos();//获取当前的位置
	CString cstr;
	cstr.Format(_T("%d"), pos);//转换为字符串
	SetDlgItemText(IDC_STATIC, cstr);//设置静态文本框显示的内容

	*pResult = 0;
}
// CMFCApplication7Dlg 消息处理程序

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

	// 将“关于...”菜单项添加到系统菜单中。

	/*....*/

	// TODO: 在此添加额外的初始化代码
	test_slider.SetRange(0, 10);/*滑动块的范围*/
	test_slider.SetPos(5);//设置当前的位置
	test_slider.SetLineSize(1);//设置使用上下左右键来控制滑块,并设置滑动单位为1
	test_slider.SetPageSize(2);//设置使用pageup和pagedown键来控制滑块,并设置滑动单位为2

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

4。运行
运行结果:
在这里插入图片描述


⌨ MFC滑动块控件 | 调色 eg

1。新建MFC项目(基于对话框、静态库)
2。添加控件,删除初始的3个多余控件
加4个edit control,添加变量test_Rvalue、test_Gvalue、test_Bvalue、test_color
加3个滑动块slider control,添加变量test_R、test_G、test_B
在这里插入图片描述
3。OnInitDialog()添加代码

// TODO: 在此添加额外的初始化代码
	test_R.SetRange(0, 255);
	test_G.SetRange(0, 255);
	test_B.SetRange(0, 255);
	test_color = RGB(0, 0, 0);

双击滑块1添加代码

void CMFCApplication10Dlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	test_Rvalue = test_R.GetPos();
	CString cstr;
	cstr.Format(_T("%d"), test_Rvalue);//转换为字符串
	SetDlgItemText(IDC_EDIT1, cstr);//设置静态文本框显示的内容

	COLORREF test_color1 = RGB(test_R.GetPos(), test_G.GetPos(), test_B.GetPos());
	CString colorstr;
	colorstr.Format(_T("%d"), test_color1);//转换为字符串
	SetDlgItemText(IDC_EDIT4, colorstr);//设置静态文本框显示的内容

	*pResult = 0;
}

在这里插入图片描述


2、3同理

void CMFCApplication9Dlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	//UpdateData(TRUE);
	test_Rvalue = test_R.GetPos();
	CString cstr;
	cstr.Format(_T("%d"), test_Rvalue);//转换为字符串
	SetDlgItemText(IDC_EDIT1, cstr);//设置静态文本框显示的内容

	COLORREF test_color1 = RGB(test_R.GetPos(), test_G.GetPos(), test_B.GetPos());
	CString colorstr;
	colorstr.Format(_T("%d"), test_color1);//转换为字符串
	SetDlgItemText(IDC_EDIT4, colorstr);//设置静态文本框显示的内容

	*pResult = 0;
}


void CMFCApplication9Dlg::OnNMCustomdrawSlider2(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	//UpdateData(TRUE);
	test_Gvalue = test_G.GetPos();
	CString cstr;
	cstr.Format(_T("%d"), test_Gvalue);//转换为字符串
	SetDlgItemText(IDC_EDIT2, cstr);//设置静态文本框显示的内容

	COLORREF test_color1 = RGB(test_R.GetPos(), test_G.GetPos(), test_B.GetPos());
	CString colorstr;
	colorstr.Format(_T("%d"), test_color1);//转换为字符串
	SetDlgItemText(IDC_EDIT4, colorstr);//设置静态文本框显示的内容

	*pResult = 0;
}


void CMFCApplication9Dlg::OnNMCustomdrawSlider3(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	//UpdateData(TRUE);
	test_Bvalue = test_B.GetPos();
	CString cstr;
	cstr.Format(_T("%d"), test_Bvalue);//转换为字符串
	SetDlgItemText(IDC_EDIT3, cstr);//设置静态文本框显示的内容

	COLORREF test_color1 = RGB(test_R.GetPos(), test_G.GetPos(), test_B.GetPos());
	CString colorstr;
	colorstr.Format(_T("%d"), test_color1);//转换为字符串
	SetDlgItemText(IDC_EDIT4, colorstr);//设置静态文本框显示的内容

	*pResult = 0;
}

4。运行
运行结果:
在这里插入图片描述


🌸 MFC进度条控件 | 定时器控制进度

1。新建MFC项目(基于对话框、静态库)
2。添加控件,删除初始的3个多余控件
加1个progress control,修改其marquee为true,添加变量:变量名为test_progress。
加2个按钮,修改caption为START,STOP。

3。添加代码
在这里插入图片描述
右键Dlg — 属性 — 消息 — VM_TIMER — ADD OnTimer

自动在类的消息映射表中添加了消息映射:
在这里插入图片描述
与一个刚新建的mfc项目的MESSAGE MAP对比:
刚新建的mfc项目的MESSAGE MAP

在打开的函数中添加代码:

void CMFCApplication13Dlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	switch (nIDEvent)
	{
	case 1:
		if (test_progress.GetPos() < 100)
		{
			test_progress.SetPos(test_progress.GetPos() + 1);
		}
		else {
			test_progress.SetPos(0);
		}
		break;
	default:
		break;
	}
	
	CDialogEx::OnTimer(nIDEvent);
}

双击按钮1(按钮1 start,2 stop),添加代码:

void CMFCApplication13Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	SetTimer(1, 1000, NULL);//第一个参数可以自己设置是定时器的标号,第二个是定时时间(ms)。启动定时器1,每隔1s刷新一次
}

同理添加按钮2的代码

void CMFCApplication13Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	KillTimer(1); //关定时器1
}

4。运行
运行结果:
在这里插入图片描述
按停止后再次按开始按钮,进度条从停止的地方再次开始前移。


MFC进度条控件 | 线程控制进度 …

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值