MFC(对话框控件设计)课程设计报告

时间:2024.4.20

C++程序设计(下)

——对话框控件的高级应用

姓    名:   吴明仕

班    级:    1020551

学    号:      33

指导老师:   孔 令 德

时间:20##年12月6日

 一、设计描述

该设计充分利用控件的不同属性实现“变幻莫测”的功能。在左边的“测试文本框属性栏”单击相应的单选按钮可以是文本编辑框处于“可以输入”、“不能输入”或者“隐藏”的状态。在图片变换栏上的图标上单击鼠标,可以实现图标的切换。启动进度条,在进度条推进过程中图片变换栏的图标会自动变换。通过点击确定可以退出该控件应用。

程序完成后如图1所示。(图1)

二、设计分析

1.执行VC程序,选择FileNew命令,弹出New对话框,单击工程标签,转到工程选项卡,选择MFC AppWizard(exe),然后在工程名称文本框中输入“对话框控件的高级应用”,单击确定后在弹出的MFC应用程序向导中选择基本对话框              (图2)

2.点击完成进行编程。

3.进行编程是还需将“启动键”、“进度条”、“图片”以及“文本编辑框”等的属性。

3.1、启动键的属性修改如下图。

3.2、进度条的属性修改如下图。

3.3、图片的属性修改如下图。

3.4.文本编辑框的属性修改如下图。

4、属性修改完后按Ctrl+W进入MFC ClassWizard的Message Maps为锁所增添的文件添加映射,然后再Member Variables中设置如下图

5、程序的最终运行 效果如下图所示。

三、源代码

1,定义全局变量

    m_str = _T("");

    m_str="测试一下CEdit控件的功能";

    m_tag=FALSE;

    m_Progress=0;

2,为添加的文件添加函数代码

// TODO: Add extra initialization here

    GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);

    UpdateData(FALSE);

    m_ComboBox.AddString("亚龙湾");

    m_ComboBox.AddString("石梅湾");

    m_ComboBox.AddString("日月湾");

    m_ComboBox.AddString("五指山");

    m_ComboBox.SetCurSel(1);

    CProgressCtrl * pProgress=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);

    pProgress->SetRange(0,50);

    pProgress->SetPos(0);

   

return TRUE;

}

void CExDlg::OnPic()

{

    // TODO: Add your control notification handler code here

    if(m_tag==FALSE)

    {

        m_icon.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON2));

        m_tag=TRUE;

    }

    else

    {

        m_icon.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));

        m_tag=FALSE;

    }

}

void CExDlg::OnRadio1()

{

    // TODO: Add your control notification handler code here

    GetDlgItem(IDC_EDIT1)->EnableWindow(TRUE);

    GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);

    UpdateData(FALSE);

}

void CExDlg::OnRadio2()

{

    // TODO: Add your control notification handler code here

    GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);

    GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);

   

    UpdateData(FALSE); 

}

void CExDlg::OnRadio3()

{

    // TODO: Add your control notification handler code here

    GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);

    GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);

   

    UpdateData(FALSE); 

}

void CExDlg::OnCloseupCombo1()

{

    // TODO: Add your control notification handler code here

    m_str.Empty();

    m_str="运行关闭下拉菜单函数";

    OnRadio1();

    UpdateData(FALSE);

}

void CExDlg::OnStart()

{

    // TODO: Add your control notification handler code here

    m_timer=SetTimer(1,50,NULL);

}

void CExDlg::OnTimer(UINT nIDEvent)

{

    // TODO: Add your control notification handler code here

    CProgressCtrl * pProgress=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);

    pProgress->SetPos(++m_Progress);

   

    if(m_Progress%5==0)

        OnPic();

    if(m_Progress>=50)

        KillTimer(m_timer);

}

四、设计总结

我做的是“对话框的控件高级应用”。通过这一次的课程设计,我巩固了上课时所学过的有关对话框方面的知识,同时还通过查找学到了课上没有涉及的知识!感受到了课外知识的重要性,可谓是受益匪浅。


第二篇:MFC计算器课程设计报告


MFC计算器课程设计报告 姓名:张胜男 班级:软件一班 学号:091842153

指导老师:储岳中

一.题目:利用MFC框架编写简易计算器

要求使用MFC框架在VC6.0环境下编写一个简易的计算器,支持任意位数的加减乘数,正负转换,并且实现C功能。

1.设计目的

通过本课程设计,初步培养通过面向对象的思想解决问题的能力,熟悉软件开发过程,增强对相关专业知识的感性认识,掌握基本软件开发技能,提高应用所学知识在实践中发现问题、分析问题和解决问题的能力。

2.Windows消息处理机制的理解

首先编写程序需要对Windows程序的消息处理机制(Message Handle)有个比较清晰的了解。Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。还有用户消息,比如鼠标的单击,双击,键盘的键入等。

3.界面的设计

1)、创建基于对话框的MFC(EXE)应用程序Calculator;

2)、在对话框窗体上顺序创建0到9十个数字按钮,并设置其标识符分别为IDC_0到IDC_9,其它按钮按下表设置属性:

3)、按表2添加各运算按钮的消息处理函数

MFC计算器课程设计报告

4、为使0到9十个数字按钮响应相同的消息处理函数,定义宏ON_COMMAND_RANGE

(1) // CalculatorDlg.h

//{{AFX_MSG(CCalculatorDlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnAdd();

afx_msg void OnMinus();

MFC计算器课程设计报告

MFC计算器课程设计报告

afx_msg void OnMutiply();

afx_msg void OnDivid(); afx_msg void OnClear(); afx_msg void OnSign(); afx_msg void OnPoint(); afx_msg void OnEqual(); afx_msg void OnSqrt(); afx_msg void OnRecip();

找到ClassView右击CCalculatorDlg添加类型为Void,函数描述为OnOperandInput(UINT iID);的protected类型的函数。然后再屏蔽掉,在此位置添加此说明

//}}AFX_MSG

(2)//CalculatorDlg.cpp

BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)

//{{AFX_MSG_MAP(CCalculatorDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_ADD, OnAdd)

ON_BN_CLICKED(IDC_MINUS, OnMinus)

ON_BN_CLICKED(IDC_MUTIPLY, OnMutiply)

ON_BN_CLICKED(IDC_DIVID, OnDivid)

ON_BN_CLICKED(IDC_CLEAR, OnClear)

ON_BN_CLICKED(IDC_SIGN, OnSign)

ON_BN_CLICKED(IDC_POINT, OnPoint)

ON_BN_CLICKED(IDC_EQUAL, OnEqual)

ON_BN_CLICKED(IDC_SQRT, OnSqrt)

ON_BN_CLICKED(IDC_RECIP, OnRecip)

ON_COMMAND_RANGE(IDC_0,IDC_9,OnOperandInput)//使用一个消息函数来处理对某个ID范围内所有控件的命令响应

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

5、在头文件CalculatorDlg.h中添加类型、成员变量及成员函数

(1)添加自定义类型:复制后找到CalculatorDlg.h再粘贴。

enum Operator { OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide};

enum CalcError { ErrNone,ErrDivideByZero};

enum Func { FuncSin, FuncTan, FuncCos, FuncSqrt, FuncSqre, FuncLn, FuncLog,

FuncN, FuncRec, FuncExp, FuncNone};

(2)添加成员变量及函数:找到CCalculatorDlg右击依次添加以下成员变量函数均为公有类型。

float m_operand; //存储当前输入的操作数 float m_accum; //存储当前的计算结果 bool m_bCoff; //标识当前输入是否是小数 float m_coff; //小数输入时的系数 Operator m_operator; //enum型变量用以标识当前运算符 CalcError m_errorState; //enum型变量用以标识当前运算状态

Func m_func; //enum型变量用以标识当前运算函数类型 bool m_bOperandAvail; //标识当前输入是否为新输入数字

找到CCalculatorDlg右击依次添加以下成员函数。

void Calculate(); //处理普通计算 void UpdateDisplay(); //处理显示 void Run_Func(); //处理函数运算

(3)为编辑框添加Cstring 变量m_result:找到Resource子菜单的Dialog的子成员IDD_CALCULATOR_DIALOG双击编辑框选中编辑框右击并选中建立类向导,MemberVariables添加Variables,其名称为m_result.

6、部分变量的初始化

CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/)

: CDialog(CCalculatorDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CCalculatorDlg)

m_result = _T("");

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

m_coff=0.1;

m_bCoff=0;

m_errorState = ErrNone;

m_bOperandAvail=FALSE;

m_operator=OpNone;

}

另:在文件CalculatorDlg.cpp中添加

#include "math.h"

7、添加各功能代码

(1)数字输入消息处理函数:找到CCalculatorDlg::OnOperandInput(UINT iID)加入以下函数

void CCalculatorDlg::OnOperandInput(UINT iID) {

ASSERT(iID >= IDC_0 && iID <= IDC_9); if(m_errorState!=ErrNone)

return;

if(!m_bOperandAvail)

m_operand=0;

if(!m_bCoff)

m_operand=m_operand*10+(iID-IDC_0); else

{

m_operand=m_operand+(iID-IDC_0)*m_coff; m_coff*=0.1;

}

m_bOperandAvail=TRUE;

UpdateDisplay();

}

(2)运算符消息处理函数:与上述步骤一样。 void CCalculatorDlg::OnAdd() //加

{

// TODO: Add your control notification handler code here Calculate();

m_operator=OpAdd;

}

void CCalculatorDlg::OnMinus()//减

{

// TODO: Add your control notification handler code here Calculate();

m_operator=OpSubtract;

}

void CCalculatorDlg::OnMutiply()//乘

{

// TODO: Add your control notification handler code here

Calculate();

m_operator=OpMultiply;

}

void CCalculatorDlg::OnDivid()//除

{

// TODO: Add your control notification handler code here Calculate();

m_operator=OpDivide;

}

void CCalculatorDlg::OnSign() //处理正负号

{

// TODO: Add your control notification handler code here m_operand*=-1;

UpdateDisplay();

}

void CCalculatorDlg::OnEqual()//处理等号

{

// TODO: Add your control notification handler code here Calculate();

m_operator=OpNone;

}

void CCalculatorDlg::OnPoint()//处理小数点

{

// TODO: Add your control notification handler code here m_bCoff=1;

UpdateDisplay();

}

void CCalculatorDlg::Calculate()//处理计算

{

if(m_errorState!=ErrNone)

return;

if(m_bOperandAvail)

{

if(m_operator==OpNone)

m_accum=m_operand;

else if(m_operator==OpMultiply)

m_accum*=m_operand;

else if(m_operator==OpDivide)

{

if(m_operand==0)

m_errorState=ErrDivideByZero; else

m_accum/=m_operand;

}

else if(m_operator==OpAdd)

m_accum+=m_operand;

else if(m_operator==OpSubtract)

m_accum-=m_operand;

}

m_bOperandAvail=FALSE;

m_bCoff=0;

m_coff=0.1;

UpdateDisplay();

}

void CCalculatorDlg::Run_Func()//处理求根和求倒 {

if (m_errorState != ErrNone)

return;

if (m_bOperandAvail)

{

if(m_func==FuncSqrt)

m_operand=sqrt(m_operand);

if(m_func==FuncRec)

m_operand=1/m_operand;

}

UpdateDisplay();

}

void CCalculatorDlg::UpdateDisplay()//处理显示 {

if(GetSafeHwnd()==NULL)

return;

if(m_errorState!=ErrNone)

m_result="除数不能为零";

else

{

float lval=(m_bOperandAvail)?m_operand:m_accum; m_result.Format(_T("%f"),lval);

int i=m_result.GetLength();

while(m_result.GetAt(i-1)=='0')

{

m_result.Delete(i-1,1);

i-=1;

} } } UpdateData(FALSE);

总结:

本次MFC计算器的制作,学习到了MFC基本的编程方法,增加了小组开发的团结协作能力。对OOP编程的理解进一步加深。但是程序仍然没存在一定的问题,比如除数不能为0的Exception handle,符号键多次点击结果混乱。由于时间仓促,如果有更多的时间,必定这些问题会迎刃而解。通过这次课程设计,以后Windows 应用程序势必会轻车熟路。

更多相关推荐:
《面向对象程序设计(课程设计)》报告

福建农林大学计算机与信息学院课程名称课题名称姓名学号专业年级指导教师职称计算机类课程设计报告面向对象程序设计课程设计猜数字游戏计算机科学与技术20xx级讲师20xx年11月面向对象程序设计课程设计成绩评定表I目...

java 面向对象程序设计课程设计报告

面向对象程序设计课程设计报告题目门禁系统的设计与实现系(院)计算机科学技术系专业软件技术班级20##级3班学生姓名学号指导教师二〇##年六月十二日团队介绍(一)第六小组成员构成组长:组员:(二)成员的不同分工及…

《面向对象程序设计》课程设计报告

面向对象程序设计课程设计报告题目职工信息管理小型公司工资管理系统院系专业班级学号学生姓名小组成员20xx年9月6日一引言本题对程序有如下要求试建立一个类Worker用于描述职工对象具体要求如下私有数据成员int...

《C++面向对象程序设计》课程设计报告

C面向对象程序设计课程设计报告题目分数计算器设置班级专业计算机科学与技术学号K031241521姓名周林指导教师小组成员周林张齐满二O一三年10月15日一课程设计问题描述分数计算器设计是高等学校教务管理的重要组...

《面向对象程序设计》课程设计报告模板

面向对象程序设计程序设计报告课程设计2020学年第学期设计题目职工工资管理系统设计院系计算机科学与信息工程学院专业班级学号学生姓名设计时间20年1月日20xx年1月日指导教师提交日期20年月日1面向对象程序设计...

面向对象程序设计实验报告

面向对象程序设计之课程设计上海电力学院课题名称院系专业学号姓名时间地点指导教师课程设计报告面向对象程序设计20xx20xx学年第一学期模仿ATM机存取款管理系统设计电子与信息工程学院通信工程20xx年1月12日...

《面向对象程序设计》课程设计报告书(模板)

面向对象程序设计课程设计报告书设计题目成绩管理系统指导老师杨雄学生学号083410148学生姓名张洋洋同组人员崔安超王龙辉魏彦浩时间20xx年11月29日目录第1章选题211题目背景212系统实现的具体分工21...

面向对象程序设计实验报告05

课程实验报告课程名称面向对象程序设计实验名称面向对象的整型队列编程院系计算机科学与技术专业班级学号姓名指导教师月日面向对象程序设计实验报告一需求分析1题目要求整型队列是一种先进后出的存储结构对其进行的操作通常包...

面向对象程序设计实验报告

面向对象程序设计实验报告姓名学号班级专业学院实验三函数的应用一实验目的掌握函数的定义和调用方法练习重载函数使用练习函数模板的使用练习使用系统函数二实验步骤编写函数floatConvertfloatTempFer...

Java面向对象程序设计语言课程设计指导书

山东建筑大学商学院电子商务专业Java面向对象程序设计语言课程设计实验指导书一对学生的基本要求1理论联系实际严肃认真实事求是的科学态度和勇于探索的创新精神2运用所学基础理论与专业知识分析和解决实际问题培养独立思...

《面向对象的编程技术》课程设计实验报告

《面向对象的编程技术》课程设计实验报告系计算机科学与技术班级计114姓名##学号##指导教师##计算机学院20##年12月一.应用程序的名称设计:坦克大战(1)参考(《PC游戏编程(窥门篇)》谭文洪著)中的坦克…

面向对象程序设计实验报告06

课程实验报告课程名称面向对象程序设计实验名称面向对象的整型队列编程院系计算机科学与技术专业班级学号姓名指导教师月日面向对象程序设计实验报告一需求分析1题目要求整型队列是一种先进后出的存储结构对其进行的操作通常包...

面向对象程序设计课程设计报告(29篇)