【C++】MFC 创建对话框,实现对课程信息和学生信息的管理

来源:互联网 发布:java输入输出流缓冲区 编辑:程序博客网 时间:2024/05/16 03:37

使用vc6.0,MFC,创建对话框

创建一个默认的对话框应用程序,并设计“课程信息”对话框和“学生信息管理”对话框。实现如下图所示功能:

默认的对话框应用程序:    

  

点击“学生基本信息”按钮会出现下图所示,点击“添加”按钮就添加成功,显示如下图所示列表框。

点击“课程信息”按钮会出现下图所示,点击“添加”按钮就添加成功,显示如下图所示列表框。

 

具备知识:

MFC相关知识,对静态控件、按钮、编辑框、旋转按钮控件、列表框、组合框控件、单选框、时间和日历控件有所了了解

具备步骤如下:(这里详细介绍一下添加“课程信息”的设计,类似的方法设计一个“学生基本信息”)

1、创建一个默认的对话框应用程序Ex_Ctrls

选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”页面,选择MFC AppWizardexe),在工程框中输入Ex_Ctrls并将工程文件夹定位到“\Visual C++程序\实验\实验2”。

单击“确定”按钮,在出现Step 1对话框中选择“基本对话(框)”应用程序类型,单击“完成”按钮。

③ 在对话框编辑器中,将对话框标题改为“使用控件”。

④ 调整对话框的大小,删除对话框中间的“TODO:在这里设置对话控制。”静态文本控件和“确定”按钮控件,将“取消”按钮标题改为“退出”,并移至对话框的下方。

⑤ 向对话框中添加组框(Group)控件,标题设为“添加”,然后调整其大小和位置。

⑥ 添加一个按钮,标题设为“课程信息”,ID设为IDC_BUTTON_COURSE

添加一个列表框,取其默认ID号,去掉Sort风格属性。

2.添加并设计“课程信息”对话框

① 按Ctrl+R快捷键,弹出“插入资源”对话框,在资源类型列表中选择Dialog,单击“新建”按钮。

② 将该对话框资源的ID设为IDD_COURSE,标题设为“课程信息”,字体设为“宋体,10号”。

③ 将OKCancel按钮的标题改为“添加”和“取消”。

④ 打开对话框网格,参看图2.2的控件布局,为对话框添加如表2.1所示的一些控件。

2.1  课程信息对话框添加的控件

添加的控件

ID

标    题

其 他 属 性

编辑框(课程号)

IDC_EDIT_COURSENO

——

默认

编辑框(课程名称)

IDC_EDIT_COURSENAME

——

默认

组合框(所属专业)

IDC_COMBO_SPECIAL

——

默认

组合框(课程类型)

IDC_COMBO_TYPE

——

默认

编辑框(开课学期)

IDC_EDIT_OPEN

——

默认

旋转按钮

IDC_SPIN1

——

Auto buddySet buddy integerRight对齐,其余默认

编辑框(课时数)

IDC_EDIT_COURSEHOURS

——

默认

编辑框(学分)

IDC_EDIT_CREDIT

——

默认

 

 

 

 

 

⑤ 右击添加的课程类型的组合框控件,从弹出的快捷菜单中选择“属性”命令,将其属性对话框切换到Data页面,直接输入内容,输入一行后按Ctrl+Return键添加另一行。结果如图2.3所示。

旋转按钮:在“样式”中勾选设置结伴整数,不用勾选自动结伴,排列:靠右

⑥ 按Ctrl+W快捷键或双击对话框资源模板的空白处,为IDD_COURSE创建一个对话框CCourseDlg

打开ClassWizardMember Variables页面,看Class name是否是CCourseDlg,选中所需的控件ID号,双击鼠标。依次为表2.2控件增加成员变量。

2.2  控件变量

控件ID

变量类别

变量类型

变量名

范围和大小

IDC_EDIT_COURSENO

Value

CString

m_strNO

 

IDC_EDIT_COURSENAME

Value

CString

m_strName

 

IDC_COMBO_SPECIAL

Value

CString

m_strSpecial

 

IDC_COMBO_SPECIAL

Control

CComboBox

m_comboSpecial

——

IDC_COMBO_TYPE

Value

CString

m_strType

 

IDC_EDIT_OPEN

Value

BYTE

m_nOpen

 

IDC_SPIN1

Control

CSpinButtonCtrl

m_spinOpen

——

IDC_EDIT_COURSEHOURS

Value

int

m_nHours

 

IDC_EDIT_CREDIT

Value

float

m_fCredit

 

 

 

 

 

 

 

3.添加CCourseDlg类代码

① 用MFCClassWizard为CCourseDlg类添加WM_INITDIALOG消息映射,并添加下列初始化代码:

BOOL CCourseDlg::OnInitDialog() {CDialog::OnInitDialog();m_spinOpen.SetRange( 1, 8 );    m_spinOpen.SetBuddy(GetDlgItem(IDC_EDIT_OPEN));m_nHours = 56;m_fCredit = 2.0;m_nOpen = 1;m_strType = "专修";// 这里对专业组合框进行初如化m_comboSpecial.AddString( "信息与计算科学" );m_comboSpecial.AddString( "电气工程及其自动化" );m_strSpecial = "信息与计算科学";UpdateData(FALSE);// TODO: Add extra initialization herereturn TRUE;  // return TRUE unless you set the focus to a control              // EXCEPTION: OCX Property Pages should return FALSE}

② 用MFC ClassWizard为按钮IDOK添加BN_CLICKED的消息映射,并增加下列代码:

void CCourseDlg::OnOK() {// TODO: Add extra validation hereUpdateData();m_strNO.TrimLeft();if (m_strNO.IsEmpty()){MessageBox("课程号不能为空!");return;}m_strName.TrimLeft();if (m_strName.IsEmpty()){MessageBox("课程名称不能为空!");return;}CDialog::OnOK();}

4.添加CEx_CtrlsDlg程序代码

① 按Ctrl+W快捷键,打开MFC ClassWizard对话框,为列表框控件IDC_LIST1添加控件变量m_List,类型为CListBox

② 用MFC ClassWizard为按钮IDC_BUTTON_COURSE添加BN_CLICKED消息映射,并添加下列代码:

void CEx_CtrlsDlg::OnButtonCourse() {// TODO: Add your control notification handler code hereCCourseDlg dlg;if (IDOK != dlg.DoModal())return;// 清除列表框原来的显示内容while(m_List.GetCount()!=0) m_List.DeleteString(0);m_List.AddString( "课 程 号:" + dlg.m_strNO);m_List.AddString( "课程名称:" + dlg.m_strName);m_List.AddString( "所属专业:" + dlg.m_strSpecial);m_List.AddString( "课程类型:" + dlg.m_strType);CString str;str.Format("开课学期:%d", dlg.m_nOpen );m_List.AddString( str );str.Format("课 时 数:%d", dlg.m_nHours );m_List.AddString( str );str.Format("学    分:%4.1f", dlg.m_fCredit);m_List.AddString( str );}

③ 在Ex_CtrlsDlg.cpp文件的前面添加CInputDlg的头文件包含:

#include "stdafx.h"#include "Ex_Ctrls.h"#include "Ex_CtrlsDlg.h"#include "CourseDlg.h"//#include "InputDlg.h"

④ 编译运行并测试

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

“学生基本信息”对话框的部分说明

学生基本信息对话框添加的控件

添加的控件

ID

标  题

其 他 属 性

编辑框

IDC_EDIT_NAME

——

默认

编辑框

IDC_EDIT_NO

——

默认

日期时间抽取器

IDC_DATE _ BIRTH

——

默认

单选按钮

IDC_SEX

Group(组),Tab Stop(制表站)

单选按钮

随机

默认

组合框(所属专业)

IDC_COMBO_SPECIAL

——

默认

 

 

 

 

 

该对话框模板创建一个对话框类CInputDlg。

MFCClassWizardMember Variables页面中,确定Class name中是否已选择了CInputDlg,选中所需的控件ID号,双击鼠标或单击Add Variables按钮。依次为表3.2控件增加成员变量。

 控件变量

控件ID

变 量 类 别

变 量 类 型

变  量  名

范围和大小

IDC_EDIT_NAME

Value

CString

 m_strName

20

IDC_EDIT_NO

Value

CString

 m_strNO

20

  IDC_COMBO_SPECIAL

 Value

 CString

    m_strSpecial

 

  IDC_COMBO_SPECIAL

 IDC_DATE_BIRTH

 IDC_SEX

 Control

 Value

 Value

 CComboBox

 CTime

 int

    m_comboSpecial

  m_tBirth

  m_nMale

——

 

 

 

 

 

 

 


类向导中在本类构造函数中修改一些值:

 

m_nMale=0;//原来是-1

MFCClassWizardMesssage Maps页面中,为CInputDlg添加WM_INITDIALOG消息映射,并添加下列代码:

BOOL CInputDlg::OnInitDialog() {CDialog::OnInitDialog();m_comboSpecial.AddString("信息与计算科学");m_comboSpecial.AddString("电气工程及其自动化");m_strSpecial = "信息与计算科学";UpdateData(FALSE);// TODO: Add extra initialization herereturn TRUE;  // return TRUE unless you set the focus to a control              // EXCEPTION: OCX Property Pages should return FALSE}

MFC ClassWizard为按钮IDOK添加BN_CLICKED的消息映射,并增加下列代码:

void CInputDlg::OnOK() {// TODO: Add extra validation hereUpdateData();m_strNO.TrimLeft();if(m_strNO.IsEmpty()){MessageBox("课程号不能为空!");return;}m_strName.TrimLeft();if(m_strName.IsEmpty()){MessageBox("课程名称不能为空!");return;}CDialog::OnOK();}

      打开IDD_EX_CTRLS_DIALOG对话框资源,在 “程信息”按钮下方添加一个“学生基本信息”按钮,并将ID号设为IDC_BUTTON_STUINFO

MFC ClassWizard为按钮IDC_BUTTON_STUINFO添加BN_CLICKED消息映射,并添加下列代码:

void CEx_CtrlsDlg::OnButtonStuinfo() { // TODO: Add your control notification handler code here CInputDlg dlg; if(IDOK != dlg.DoModal())  return; while(m_List.GetCount() != 0)  m_List.DeleteString(0);//清空列表 CString strSex("男"); if(dlg.m_nMale)  strSex = "女"; m_List.AddString("姓名:" + dlg.m_strName); m_List.AddString("学号:" + dlg.m_strNO);  m_List.AddString("性别:" + strSex); m_List.AddString("出生年月:" + dlg.m_tBirth.Format("%Y-%m-%d")); m_List.AddString("所属专业:" + dlg.m_strSpecial);}

在Ex_CtrlsDlg.cpp文件的前面添加CStuInfoDlg类的头文件,然后编译运行即可。



2 1
原创粉丝点击