MFC之Button控件(一)

今天汇总下MFC中Button的常用技巧
上图片
Button类
按照惯例先拖进Dialog中
对话框界面

1.常规Button控件——按钮

添加方式拖拽,属性界面可以改ID,可以改显示内容;
(1) 设置/获取 文本 : SetWindowText()/GetWindowText()
(2) 设置图标:button类是不能设置背景色或背景图片的,只能设置"图标" + “文本” 的格式
双击添加响应事件OnBnClickedButton1()。
按钮是常用的控件,可以用来实现各种交互式指令。这里样例展示的是按钮1按下,按钮2可以被选中,同时在静态文本框中显示操作内容。
button2

button1
代码

void CMFCDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
	SetDlgItemTextW(IDC_STATIC_LOG, _T("BUTTON1被按下"));
}


void CMFCDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
	SetDlgItemTextW(IDC_STATIC_LOG, _T("BUTTON2被按下"));
}

2.Radio Button Control控件

这不是什么收音机,无线电,这个是单选按钮。提供由两个或多个互斥选项组成的选项集,供你选择。就像做单选题,你只能选择其中一个选项。
当单击 RadioButton 控件时,其 Checked 属性设置为 true,同时调用 Click 事件处理程序。当 Checked 属性的值更改时,将引发 CheckedChanged 事件。
控件内显示的文本使用 Text 属性进行设置,该属性可以包含访问键快捷方式。也可以使用指令

SetDlgItemText( IDC_XXX, TEXT(“我是控件显示的文字”) );

拖拽控件到对话框里
radio
这里建了五个,按照行分两组。
因为是单选按钮,分组时按照控件顺序来,在资源界面Ctrl+D可以看控件顺序,也可以按照想要的顺序进行单击控件排序。
顺序
这里radio1,radio2,radio5,分别对应5,6,7;
radio3,radio4,分别对应8,9。这里我手动改过顺序,将radio5的次序排到radio3和radio4前边。目的是为了将radio1,radio2和radio5放在一组。
设置分组。选中radio1控件,打开属性界面,将【Group】/【组】的属性置为true;radio3也一样设置,其他radio都为false;这样就完成了分组。在类向导成员变量里只能看到IDC_RADIO1和IDC_RADIO3。
组属性页

分别给每个radio添加单击事件OnBnClickedRadio(),双击控件完成添加;

void CMFCDlg::OnBnClickedRadio1()
{
	// TODO: 在此添加控件通知处理程序代码
	//SetDlgItemTextW(IDC_STATIC_LOG, _T("Radio1被选中"));
	int radioID = myRadioCtrl.GetCheck();
	int radioID2 = myRadioCtrl2.GetCheck();
	int radioID3 = myRadioCtrl.GetCheck();
	int radioID4 = myRadioCtrl2.GetCheck();
	int radioID5 = myRadioCtrl.GetCheck();
	CString str;
	str.Format(_T("Radio控件选中情况是\rRadio1-%d\rRadio2-%d\rRadio3-%d\rRadio4-%d\rRadio5-%d\r"), 
		radioID, radioID2,radioID3, radioID4, radioID5);
	SetDlgItemTextW(IDC_STATIC_LOG, _T("Radio1被选中\r") + str);
}

void CMFCDlg::OnBnClickedRadio2()
{
	// TODO: 在此添加控件通知处理程序代码
	//SetDlgItemTextW(IDC_STATIC_LOG, _T("Radio2被选中"));
	int radioID = myRadioCtrl.GetCheck();
	int radioID2 = myRadioCtrl2.GetCheck();
	int radioID3 = myRadioCtrl.GetCheck();
	int radioID4 = myRadioCtrl2.GetCheck();
	int radioID5 = myRadioCtrl.GetCheck();
	CString str;
	str.Format(_T("Radio3被选中\rRadio控件选中情况是\rRadio1-%d\rRadio2-%d\rRadio3-%d\rRadio4-%d\rRadio5-%d\r"), radioID, radioID2, radioID3, radioID4, radioID5);
	SetDlgItemTextW(IDC_STATIC_LOG, str);
}

void CMFCDlg::OnBnClickedRadio3()
{
	// TODO: 在此添加控件通知处理程序代码
	//SetDlgItemTextW(IDC_STATIC_LOG, _T("Radio3被选中"));
	CString str;
	str.Format(_T("Radio3被选中\rRadio控件选中情况是\rRadio1-%d\rRadio2-%d\rRadio3-%d\rRadio4-%d\rRadio5-%d\r"), 
		myRadioCtrl.GetCheck(), myRadioCtrl2.GetCheck(), myRadioCtrl3.GetCheck(), myRadioCtrl4.GetCheck(), myRadioCtrl5.GetCheck());
	SetDlgItemTextW(IDC_STATIC_LOG, str);
}

void CMFCDlg::OnBnClickedRadio4()
{
	// TODO: 在此添加控件通知处理程序代码
	//SetDlgItemTextW(IDC_STATIC_LOG, _T("Radio4被选中"));
	CString str = RadioLogShow(_T("Radio4"));
	SetDlgItemTextW(IDC_STATIC_LOG, str);
}

效果展示
radio1选中
radio4选中
分别给radio1,radio3添加int型变量

int m_RadioValue;
int m_RadioValue2;

控件传递的值将变为,每组radio中选中的是第几个控件。如第一组中radio1对应0;radio2对应1,radio5对应2。
int类型变量
这里设计了button按钮进行指令显示

UpdateData(TRUE);
CString str;
str.Format(_T("第一组选中ID是%d\r第二组选择ID是%d。\r"), m_RadioValue, m_RadioValue2);
SetDlgItemTextW(IDC_STATIC_LOG, str);

3.Slipt Button Control控件

Split Button实际上是Button跟Menu的组合,样式跟Windows关机按钮一样,点击可以展开菜单按钮,再分别选择其他功能按钮
关机按钮
老规矩,先拖一个Slipt Button到Dialog里。设定变量CSplitButton 类型的变量

CSplitButton mySplitBtn;

双击按钮创建命令。随便写点什么。比如

void CMFCDlg::OnBnClickedSplit1()
{
	// TODO: 在此添加控件通知处理程序代码
	AfxMessageBox(_T("Split按钮被选中"));
}

然后,它是什么?【Button跟Menu的组合】,搞一个Menu出来。
打开资源视图,右键项目,点击【添加资源(A)…】,在弹出的对话框里选择Menu

Menu添加
进入下图的界面,键入内容。看心情添加。这里参照了VS的工具栏。
Menu设置
然后给打开添加个COMMAND做测试。右键【打开】->【添加事件处理程序(A)…】
打开添加指令
重点来了这里一定要在类列表里选择你控件所在的Dialog类。然后再点确定,默认是消息对话框的CAboutDlg类,如果你创建项目的时候有勾选。
错误示例
编辑命令

void CMFCDlg::OnOpenFile()
{
	// TODO: 在此添加命令处理程序代码
	CFileDialog fileDialog(
		TRUE, // TRUE表示要选择文件夹,FALSE则为选择文件
		NULL, // 使用默认的文件扩展名
		NULL, // 使用默认的初始目录
		OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, // 设置文件必须存在和路径必须有效的条件
		NULL, // 使用默认的过滤器
		NULL // 不指定父窗口
	);

	// 显示对话框
	if (fileDialog.DoModal() == IDOK)
	{
		CString selectedFolderPath = fileDialog.GetPathName(); // 获取选中的文件夹路径
		// 处理选中的文件夹路径
	}
}

这样就编辑完了,展示效果
单击效果
单击
下键选择效果
下按键
欲知剩余Button,请看下篇介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值