您的位置:首页 > 其它

MFC Radio Button 和 Combox Button的简单操作

2015-10-04 20:09 417 查看
一、

建立基于对话框的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();
}


此时整个功能就完成了。

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







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: