MFC Radio Button 和 Combox Button的简单操作

一、

建立基于对话框的MFC程序

 

首先创建控件,如图所示.

控件变量的名字分别为:

工号:m_strNo

姓名:m_strName 

性别:m_cbSex 

学历:m_cbEducation

性别创建变量前先选中'男','女',Group设为TRUE创建之后再设回为FALSE


1.设置男女的初始值,在初始化区域内

m_cbSex.Check(TRUE);
2.双击性别选择测试按钮:

void CRatio_ComboxDlg::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str = L"你选中的性别是";
	if (m_cbSex.GetCheck())
		str = str + L"男";
	else str = str + L"女";
	MessageBox(str,L"Sex");
}
3.设置初始学历

在初始化区域内:

	// 设置初始学历
	m_cbEducation.AddString(L"小学");
	m_cbEducation.AddString(L"初中");
	m_cbEducation.AddString(L"高中");
	m_cbEducation.AddString(L"本科");
	m_cbEducation.AddString(L"专科");
	m_cbEducation.AddString(L"硕士");
	m_cbEducation.AddString(L"博士");
这样的设置是按字母顺序排序的,并且可以修改选择的内容。更改Combox的Style属性为DropList即不可修改。

自定义排序:

	// 自定义学历排序
	m_cbEducation.InsertString(0, L"小学");
	m_cbEducation.InsertString(1, L"初中");
	m_cbEducation.InsertString(2, L"高中");
	m_cbEducation.InsertString(3, L"本科");
	m_cbEducation.InsertString(4, L"专科");
	m_cbEducation.InsertString(5, L"硕士");
	m_cbEducation.InsertString(6, L"博士");

	// 设置学历初始值
	m_cbEducation.SetCurSel(3);

4.测试学历

双击学历选择测试进去编写代码

void CRatio_ComboxDlg::OnBnClickedButton2()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str_sel;
	CString str_sum;
	int i_sum;
	m_cbEducation.GetWindowTextW(str_sel);        // 获取选择
	str_sel = L"选择的学历是" + str_sel + L",";   // 组合成字符串

	i_sum = m_cbEducation.GetCount();             // 获取个数
	str_sum.Format(L"%d", i_sum);                 // 转化为字符串
	str_sum = L"共有" + str_sum + L"种学历层次";  // 组合字符串
	
	MessageBox(str_sel + str_sum, L"Education");
}

5.设置工号和姓名的初始值

在初始化区域中

	//设置工号和姓名的初始值
	m_strName = L"War001";
	m_strNo = L"LS2015";
	
	// 把成员变量的数据更新到窗口控件
	UpdateData(FALSE);


运行结果:



二、

建立基于对话框的MFC应用程序

1.首先设置好控件,如图所示


2.初始化

(1)初始化线性

线性对应的复选框ID取名为IDC_COMBO_LINESTYLE

然后在初始化区域BOOL CMFCProcDlg::OnInitDialog()填写代码

	// 添加线型
	((CComboBox*)GetDlgItem(IDC_COMBO_LINESTYLE))->InsertString(0, L"实  线");
	((CComboBox*)GetDlgItem(IDC_COMBO_LINESTYLE))->InsertString(1, L"虚  线");
	((CComboBox*)GetDlgItem(IDC_COMBO_LINESTYLE))->InsertString(2, L"虚  线");
	((CComboBox*)GetDlgItem(IDC_COMBO_LINESTYLE))->InsertString(3, L"点  线");
	((CComboBox*)GetDlgItem(IDC_COMBO_LINESTYLE))->InsertString(4, L"点划线");
	((CComboBox*)GetDlgItem(IDC_COMBO_LINESTYLE))->InsertString(5, L"双点划线");
	((CComboBox*)GetDlgItem(IDC_COMBO_LINESTYLE))->SetCurSel(0);
这步设置完后,复选框就有用了



(2)设置线宽

取线宽对应的编辑框的名字为IDC_EDIT_LINEWIDTH

在BOOL CMFCProcDlg::OnInitDialog()初始函数中初始化线宽为0

	// 初始化线宽
	::SendMessage(GetDlgItem(IDC_EDIT_LINEWIDTH)->m_hWnd, WM_SETTEXT, 10, (LPARAM)L"0");

(3)设置图形

将单选框“直线”选为Group为TRUE,然后添加int变量m_iGraphStyle.

此时单选框就有用了。




3.画图

注释掉void CMFCProcDlg::OnPaint()函数{}内的所有内容。

在头文件中定义颜色变量m_color

设置显示效果组合框的ID为IDC_STATIC_SHOW

public:
	// 图形状
	int m_iGraphStyle;

	// 颜色
	int m_color;

在画图函数中写如下代码:

	CPaintDC dc(this);

	// 将组合框中的内容传递给成员变量
	UpdateData();

	// 获取线型组合框的选项
	int line_style = ((CComboBox*)GetDlgItem(IDC_COMBO_LINESTYLE))->GetCurSel();

	// 获取线宽度
	TCHAR str_width[12] = L"";
	::SendMessage(GetDlgItem(IDC_EDIT_LINEWIDTH)->m_hWnd, WM_GETTEXT, 10, (LPARAM)str_width);
	int i_width = _ttoi(str_width);

	// 设置画笔
	CPen pen(line_style, i_width, m_color);
	CPen *pOldPen = dc.SelectObject(&pen);

	// 要画的区域
	CRect rect;
	
	// 获取显示效果组合框区域
	GetDlgItem(IDC_STATIC_SHOW)->GetWindowRect(&rect);
	
	// 将设备值转化为逻辑值
	ScreenToClient(&rect);

	switch (m_iGraphStyle){
	case 0: // 直线
		dc.MoveTo(rect.left + 20, rect.top + rect.Height() / 2);
		dc.LineTo(rect.right - 20, rect.top + rect.Height() / 2);
		break;
	case 1: {// 弧线
		dc.MoveTo(rect.left + 5, rect.top + rect.Height() / 2);
		const int NUM = 1000;
		POINT apt[NUM];
		for (int i = 0; i < NUM; i++){
			apt[i].x = i*(rect.Width()-20) / NUM + rect.left+10;
			apt[i].y = (int)(((rect.Height()-20) / 2)*(1 - sin(3.14 * 8 * i / NUM)) + rect.top + rect.Height() / 16);
		}
		dc.Polyline(apt, NUM);
	}break;
	case 2: // 椭圆
		dc.Ellipse(rect.left + 10, rect.top + 10, rect.right - 10, rect.bottom - 10);
		break;
	case 3: // 矩形
		dc.Rectangle(rect.left + 10, rect.top + 10, rect.right - 10, rect.bottom - 10);
		break;
	case 4: // 文字
		dc.TextOutW(rect.left + 30, rect.top + rect.Height() / 2, L"MFC程序文字显示,显示效果展示");
		break;
	}
	dc.SelectObject(pOldPen);

此时已经可以正常显示图形了。

分别双击“直线”,”弧线“,“椭圆“,”矩形“,”文字“

填入代码:

Invalidate();
使整个窗口无效,致使重绘.

但是此时点击线型,填写线宽后都不能立刻重绘.此时也是分别双击,填入如上代码.

4.颜色设置

双击颜色设置按钮。

void CMFCProcDlg::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
	CColorDialog Dlg;
	if (Dlg.DoModal() == IDOK){ // 如果点击确认
		m_color = Dlg.m_cc.rgbResult;
	}
        Invalidate();
}

此时整个功能就完成了。

但是文字的颜色效果并没有改变。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值