MFC基本应用程序的建立实验报告
《MFC编程及应用》课程设计报告
《MFC编程及应用》课程设计报告题目:计算器学号:姓名:指导老师:时间:为了完成计算器这个程序的编程,我首先创建了一个基于对话框的应用程序。
我在对话框中添加了三个编辑框,分别用来输入操作数和输出结果,添加了三个静态文本框来标记三个编辑框,添加了四个按钮来实现加减乘除的运算。
通过设置静态文本框的属性,我将它们的名字改为“数1”,“数2”和“结果”。
同样我改变了按钮的名字,我先为“加”这个按钮添加了一个BN-CLICKED的成员函数,这时候对话框的类中就出现了一个ON_BATTON1的消息响应函数要从两个编辑框中取出输入的值,我在这个消息响应函数中新增了三个char型数组的成员变量用来保存输入的字符和输出字符,由于计算机处理的是整数不是字符,所以我又增加了三个整型的成员变量num1,num2,num3作为计算机处理的变量。
在这个过程中,我碰到了四个问题,一,要怎么把输入的字符从编辑框中取出来。
为此我调用了一个函数GetDlgItem(IDC_EDIT2)->GetWindowText(ch1,10);将编辑框中的字符取出并赋值给ch1[]。
二,要怎么把一个字符型的变量转变成整形变量,我调用了函数num1=atoi(ch1);这样就实现了从字符到整数的转变。
三,怎样保证输入的是1到100的数,我用了一个if语句来判断,if(num1<1||num1>100||num2<1||num2>100)MessageBox("请输入一个1到100的整数");else{ num3=num1+num2;只有当输入的是满足要求的数时才进入下一步,如果输入数非法就弹出一个对话框提示输入非法。
四,要怎么把结果输入到第三个编辑框中,由于计算结果是一个整数所以我先调用了函数itoa(num3,ch3,10);将其变成字符,并利用函数GetDlgItem(IDC_EDIT4)->SetWindowText(ch3);将它输出到第三个编辑框中。
cpp报告实验七_MFC_控件编程实验
实验七 MFC 控件编程实验一、实验目的(1) 熟悉Visual Studio 开发环境;(2) 掌握类向导的使用方法,熟练使用类向导进行消息映射,添加类的数据成员;(3) 掌握MFC 环境下标准控件的使用方法。
二、实验内容创建基于对话框的应用程序,在图形显示区绘制一个矩形并用单色画刷填充矩形内部。
通过滚动条控件设置填充颜色,并在编辑框中显示颜色的RGB值,通过单选按钮可以设置矩形的边框线型,“显示图形”复选框可以控制是否显示矩形。
设置完成后,单击“显示”按钮在“图形显示区”显示新的绘图效果。
单击“退出”按钮退出程序。
三、实验结果1 列表说明各个控件的属性设置,列出控件功能的实现代码;程序代码:DemoDlg.cpp:#include "stdafx.h"#include "Demo.h"#include "DemoDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifclass CAboutDlg : public CDialog{public:CAboutDlg();enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV supportprotected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/): CDialog(CDemoDlg::IDD, pParent), m_nLineStyle(0), m_nShow(TRUE), m_szRGB(_T("")){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CDemoDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Radio(pDX, IDC_SOLID, m_nLineStyle);DDX_Check(pDX, IDC_SHOW, m_nShow);DDX_Control(pDX, IDC_RED, m_Red);DDX_Control(pDX, IDC_GREEN, m_Green);DDX_Control(pDX, IDC_BLUE, m_Blue);DDX_Text(pDX, IDC_RGB, m_szRGB);}BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_START, OnStart)ON_BN_CLICKED(IDC_STOP, OnStop)ON_WM_TIMER()ON_WM_HSCROLL()ON_BN_CLICKED(IDC_DOT, &CDemoDlg::OnBnClickedDot)ON_BN_CLICKED(IDC_SHOW, &CDemoDlg::OnBnClickedShow)ON_BN_CLICKED(IDC_SOLID, &CDemoDlg::OnBnClickedSolid)ON_BN_CLICKED(IDC_DASH, &CDemoDlg::OnBnClickedDash)ON_NOTIFY(NM_THEMECHANGED, IDC_RED, &CDemoDlg::OnNMThemeChangedRed) END_MESSAGE_MAP()BOOL CDemoDlg::OnInitDialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}SetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small iconm_Red.SetScrollRange(0, 255);m_Green.SetScrollRange(0, 255);m_Blue.SetScrollRange(0, 255);m_Red.SetScrollPos(100);m_Green.SetScrollPos(100);m_Blue.SetScrollPos(100);m_szRGB = _T("RGB(100,100,100)");UpdateData(FALSE);return TRUE;}void CDemoDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}void CDemoDlg::OnPaint(){CPaintDC dc(this);CPen Pen2,*pOldPen;CBrush Brush, *poldbrush;UpdateData(TRUE);switch (m_nLineStyle){case 0:Pen2.CreatePen(PS_SOLID, 3, RGB(255,0,0));Brush.CreateSolidBrush(RGB(m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos()));break;case 1:Pen2.CreatePen(PS_DASH, 1, RGB(255, 0, 0));Brush.CreateSolidBrush(RGB(m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos()));break;case 2:Pen2.CreatePen(PS_DASHDOT, 1, RGB(255, 0, 0));Brush.CreateSolidBrush(RGB(m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos()));break;case 3:Pen2.CreatePen(PS_DASHDOTDOT, 1, RGB( 255, 0, 0));Brush.CreateSolidBrush(RGB(m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos()));break;}if (m_nShow == true){dc.SelectObject(&Brush);poldbrush = dc.SelectObject(&Brush);dc.SelectObject(&Pen2);pOldPen = dc.SelectObject(&Pen2);dc.Rectangle(20, 30, 410, 210);dc.SelectObject(pOldPen);dc.SelectObject(poldbrush);}}HCURSOR CDemoDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CDemoDlg::OnStart(){SetTimer(1,500,NULL);}void CDemoDlg::OnStop(){KillTimer(1);exit(0);}void CDemoDlg::OnTimer(UINT nIDEvent){CRect rt(15, 20, 420, 220);InvalidateRect(&rt);CDialog::OnTimer(nIDEvent);}void CDemoDlg::OnHScroll(UINT nSBCode, UINT nPos,CScrollBar* pScrollBar){switch (nSBCode){case SB_THUMBTRACK:pScrollBar->SetScrollPos(nPos);break;case SB_LINELEFT:pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 5);break;case SB_LINERIGHT:pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 5);break;case SB_PAGELEFT:pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 20);break;case SB_PAGERIGHT:pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 20);break;}m_szRGB.Format("RGB(%d,%d,%d)",m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos());UpdateData(FALSE);CDialog::OnHScroll(nSBCode, nPos, pScrollBar);}void CDemoDlg::OnBnClickedDot(){}void CDemoDlg::OnBnClickedShow(){// TODO: 在此添加控件通知处理程序代码}void CDemoDlg::OnBnClickedSolid(){// TODO: 在此添加控件通知处理程序代码}void CDemoDlg::OnBnClickedDash(){// TODO: 在此添加控件通知处理程序代码}void CDemoDlg::OnNMThemeChangedRed(NMHDR *pNMHDR, LRESULT *pResult){*pResult = 0;}g::OnHScroll(nSBCode, nPos, pScrollBar);}DemoDlg.h:#include "afxwin.h"#if !defined(AFX_DEMODLG_H__C9F67558_0B42_4FF2_B643_A3FB1D923475__INCLUDED_) #define AFX_DEMODLG_H__C9F67558_0B42_4FF2_B643_A3FB1D923475__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CDemoDlg : public CDialog{public:CDemoDlg(CWnd* pParent = NULL); // standard constructorenum { IDD = IDD_DEMO_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX);protected:HICON m_hIcon;virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnStart();afx_msg void OnStop();afx_msg void OnTimer(UINT nIDEvent);DECLARE_MESSAGE_MAP()public:int m_nLineStyle;BOOL m_nShow;CScrollBar m_Red;CScrollBar m_Green;CScrollBar m_Blue;afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);CString m_szRGB;afx_msg void OnBnClickedDot();afx_msg void OnBnClickedShow();afx_msg void OnBnClickedSolid();afx_msg void OnBnClickedDash();afx_msg void OnNMThemeChangedRed(NMHDR *pNMHDR, LRESULT *pResult); };#endif2 运行结果3 总结类向导的功能和使用方法;类向导功能:它为VC提供了一个管理类的一个快捷的界面和快捷的方式,使我们能方便的管理成员变量、成员函数、消息映射等,而不用手动修改单个的代码文件.使用方法:在类视图选中要操作的类(DemoDlg),点击右键弹出类向导,在类向导中选中要操作的命令、消息或成员变量,点击添加处理程序或添加变量,然后在代码中相应位置编辑所需代码。
《MFC编程及应用》课程设计报告
《MFC编程及应用》课程设计报告题目: 简易型科学计算器学号: 姓名:****: ***时间: 2012年5月16日1、设计步骤a)工程建立本工程建立的是一个基于对话框的应用程序。
b)类中新增变量的作用m_inputstr : CEdit类型, 用于与程序中编辑框相关联;m_FormerBase :用于记录上一次是出于何种进制之下, 便于进制转换;c)CMathString: 用于对字符串进行逆波兰表达式的转换并计算结果d)需处理的消息的详细代码对按钮0(OnBnClickedButton0)的响应函数:void CMy1106840420Dlg::OnBnClickedButton0(){CString temp;//定义一个CString对象this->UpdateData(true);//从编辑框获得m_inputstr的值m_inputstr.GetWindowText(temp);//获取字符串并存入temp中temp += '0';//在字符串末尾添加字符‘0’this->m_inputstr.SetWindowText(temp);//将字符串设置回m_inputstr中this->UpdateData(false);//更新数据, 编辑框显示}对按钮1(OnBnClickedButton1)、2(OnBnClickedButton2)、3(OnBnClickedButton3)、4(OnBnClickedButton4)、5(OnBnClickedButton5)、6(OnBnClickedButton6)、7(OnBnClickedButton7)、8(OnBnClickedButton8)、9(OnBnClickedButton9)、A(OnBnClickedButtonA)、B(OnBnClickedButtonB)、C(OnBnClickedButtonC)、D(OnBnClickedButtonD)、E(OnBnClickedButtonE)、F(OnBnClickedButtonF)、左括号(OnBnClickedButtonLbracket)、右括号(OnBnClickedButtonRbracket)、+(OnBnClickedButtonAdd)、—(OnBnClickedButtonMinus)、×(OnBnClickedButtonMultiply)、/(OnBnClickedButtonDiv)、小数点(OnBnClickedButtonPoint)、PI (OnBnClickedButtonPi)的响应函数与按钮0类似, 仅末尾添加的字符变为相应的字符。
《MFC》实验报告模板
贵州大学实验报告学院:梁玉涛专业:计算机科学与技术班级:计科职091 姓名梁玉涛学号0920020217 实验组 1 实验时间2011.10.25 指导教师曾劼成绩实验项目名称使用计算数据画直方图实验目的1.了解图形设备接口GDI编程;2.学会应用GDI编写应用程序;3.实现使用计算数据画直方图。
实验要求1.了解有关GDI的相关知识及使用;2.根据实验指导书完成实验内容。
实验原理图形设备接口GDI(Graphics Device Interface)是一个系统库,允许对系统的硬件进行独立于设备的访问。
GDI的核心是设备上下文类DC(Device Contex):设置绘图属性和驱动设备绘图的方法。
封装了Windows API中的画图函数,设备上下文是内存中的一个对象,设备可以是屏幕或打印机。
实验仪器计算机、VC++ 6.0实验步骤1.使用AppWixard生成单文档工程Plot2.在PlotDoc.h中类CPlotDoc的定义之前加入类Max的定义3.在PlotDoc.cpp的文件尾部加入类Max的实现部分4.为CPlotDoc类增加一个公有的void类型的成员函数Find和一个公有int数据成员数组m_num[5],使用类产生对象并计算它们的最大值,将它们转换成int,存入整数数组m_num。
5.为CPlotDoc类的成员函数OnNewDocument增加调用语句准备数据。
6.在视类中画图写字;7.运行程序,并观察结果。
1实验使用计算数据画直方图内容实验数据实验总结指导教师意见签名:年月日。
MFC实验报告(模板)
重庆交通大学程序设计实训I课程实验报告
班级:专业级班
姓名:
学号:
实验项目名称:
实验项目性质:
实验所属课程:
实验室(中心):
指导教师:
实验完成时间:年月日
教师评阅意见:
签名:年月日实验成绩:
一、实验目的
二、实验主要内容及要求
三、实验设备及软件
四、设计方案
㈠题目(老师给定或学生自定)
㈡设计的主要思路或相关算法的流程图
㈢主要功能
五、主要代码及必要说明
六、实验结果及说明
七、测试数据与测试结果分析
八、实验体会
九、附录
此部分主要标明主要参考文献或其它需要特殊说明部分。
MFC实践报告
c++课程设计实验报告——科学计算器学号:03109613 姓名:徐洁月院系专业:建筑环境与设备工程目录一、课题名称······················································二、问题陈述三、设计目标和设计任务四、解题算法思想五、数据结构描述六、测试数据七、运行情况分析八、设计小结九、心得体会参考资料提交日期一.课题名称科学计算器的设计二.问题陈述三.设计目标和设计任务 3.1初期对自我的要求通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。
通过实践进一步领会程序设计的特点和应用,提高运用c++ 语言以及面向对象知识解决实际问题的能力。
通过实践掌握用c++ 语言编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用c++程序设计语言编写出一些短小、可靠的windows实用程序,切实提高面向对象的程序设计能力。
为后续的相关课程的学习打下基础。
3.2设计目标和任务要求实现具有加,减,乘,除基本四则运算功能要求能够实现二进制,八进制,十进制,十六进制转换设计基于mfc框架的,具有友好界面的windows应用程序科学计算器要求具有运算优先级别,包括运算符号的优先级判断,实现基于括号的优先级控制科学计算器要求具有科学函数计算功能,主要包括三角函数(具有角度与弧度的切换),指数函数,对数函数等四.解题算法思想4.1 算法基本流程1)用户通过键盘或者计算机上的按钮输入计算表达式2)这时所输入的表达式在用户看来是数学运算符号,我们要做的就是将数学表达式转换成字符串3)查看整个算式中的括号是否都左右匹配,如果不匹配则推出并提示用户并退出。
mfc实验设计报告
《面向对象程序设计》数学与计算机学院VC++课程设计设计题目:学生信息管理系统学生学号:1007020304学生姓名:刘正学生专业:信息与计算科学学生班级:10级信计三班指导老师:李建湘制作时间:2011年12月14日目录一、前言 (2)二、系统需求分析 (3)三、程序设计思路 (3)四、模块分析 (5)五、主要功能图示及代码 (9)六、创新内容 (17)七、存在的问题与不足 (17)八、收获与感想 (18)九、程序其它重要源代码 (19)十、后记 (27)十一、参考文献 (28)前言作为大二的一名学生,我们已经学习汇编语言快一年了,但是自己从来没有做过一个有实用价值的程序。
总是怀疑我们学的c语言,c++以后会有用吗?几乎都是编写一些数学计算题。
直到老是教我们MFC编程后,才知道应用程序的设计过程。
说实话,在课程设计之前,我没有听过什么MFC编程,所以在设计的过程中也是困难重重,每走一步都是相当艰难的。
从开始设计到完成设计,我花了两个多星期,中间重做了无数次。
真的难以想象爱迪生发明电灯时是怎么熬过来的。
这个程序虽然不完美,但是花了我不少的心血。
这将是我程序生涯的开始!学习MFC编程,最重要的就是自学。
刚开始,什么都不懂,为什么要这么做?好多函数都不不知道是干什么用的,更不用说使用它们。
因此,不得不借助图书馆和网络了解它们。
MFC函数库很庞大,我这次用到的微乎其微,以后还得不断的学习和熟悉。
一个那么庞大的函数库,我们该如何掌握它呢?通过这半个多月的学习,我个人觉得最重要的就是多练习,只有不断的练习,才能掌握它们的规律,帮助我们学好MFC函数库。
接下来,我将把这些天的成果在这里展现出来,与大家一起分享这份来之不易的喜悦!一、系统需求分析随着互联网的发展,利用internet 技术来实现“无纸办公”这个概念已经深入人心,校园网作为学校信息化建设的一个平台在完成资源共享、互联网访问、教务管理、电子备课等方面发挥了重要作用。
mfc实验报告
mfc实验报告MFC实验报告引言:MFC(Microsoft Foundation Class)是一种用于开发Windows桌面应用程序的框架,它提供了丰富的类库和工具,简化了Windows应用程序的开发过程。
本文将介绍我在进行MFC实验过程中的经验和收获。
一、实验背景MFC作为一种常用的开发框架,被广泛应用于Windows平台的软件开发中。
通过学习和实践MFC,可以更好地理解Windows应用程序的开发原理和方法。
二、实验目的本次实验的目的是通过开发一个简单的MFC应用程序,掌握MFC的基本使用方法和开发流程。
同时,通过实践了解MFC的一些重要概念和特性。
三、实验过程1. 环境搭建首先,需要安装Visual Studio,选择合适的版本并按照提示进行安装。
安装完成后,打开Visual Studio,创建一个新的MFC应用程序项目。
2. 界面设计在MFC应用程序中,界面设计是一个重要的环节。
通过使用Visual Studio提供的可视化设计工具,我们可以方便地创建和布局界面元素,如按钮、文本框等。
3. 事件处理在MFC应用程序中,用户的操作往往会触发一些事件,如点击按钮、输入文本等。
我们需要编写相应的事件处理函数,来响应这些事件并执行相应的操作。
在实验中,我学会了如何编写事件处理函数,并与界面元素进行关联。
4. 数据处理在实际应用中,数据的处理是不可或缺的一部分。
通过学习MFC,我了解到如何在应用程序中进行数据的输入、输出和处理。
MFC提供了丰富的类库和接口,可以方便地进行数据操作。
5. 调试与测试在开发过程中,调试和测试是必不可少的环节。
通过使用Visual Studio提供的调试工具,我学会了如何定位和修复程序中的错误,并进行功能测试和性能测试。
四、实验结果经过一段时间的学习和实践,我成功地开发了一个简单的MFC应用程序。
该程序可以实现基本的界面显示和数据处理功能。
通过实验,我对MFC的使用有了更深入的了解,并且掌握了一些常用的开发技巧和方法。
mfc程序实验报告
mfc程序实验报告篇一:MFC实验报告实验日期:2013 年05 月18 日一、实验目的1、熟悉Visual C++的基本操作。
2、基本了解基于对话框的windows 应用程序的编写过程。
3、对于Windows Socket编程建立初步概念。
二、实验要求1、应用Visual C++中MFC CSocket 类,实现网络数据传输。
2、仿照本实验步骤,制作实用的局域网一对一聊天程序。
三、实验原理设置加入连接的数目,通过更改IP 地址和端口号,成为不同的客户端,与服务器端连接,实现用户间的聊天功能。
1.程序整体框架:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。
当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。
2.客户端(Client)客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。
客户端不需要指定打开的端口,通常临时的、动态的分配一个端口。
3.服务器端(Server)服务器端,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
4.用户图形界面用户图形界面方便程序与用户的交互,多个用户参加,完成会话功能,具体的设计要方便用户的使用,直观清晰,简洁明了,友好美观。
四、实验内容一个最简单的点对点聊天程序客户机/服务器模式是socket点对点网络程序典型的模式,以下这个实验就是实现一个简单的点对点通信的聊天程序。
它用到的方法也是面向连接TCP连接的套接字MFC典型方式。
其工作过程是:服务器首先启动,创建套接字后等待客户的连接;客户启动以后,创建套接字,然后和服务器建立连接;连接建立后,客户机和服务器可以通过建立的套接字连接进行信息通信。
MFC课程实践报告
中南大学本科生课程设计(实践)任务书、设计报告(C++程序设计基础课程设计)题目程序设计实践——MFC基础学生学号1201141311学生姓名李婌学院土木工程院专业班级土木1413班指导老师李利明计算机基础教学实验中心2015年7月9日MFC系统摘要在VC++中使用MFC类库编写简单Windows应用程序。
基于课本知识并结合自己所编程序简要介绍MFC:MFC与菜单设计、MFC与对话框设计、MFC与绘图。
简述编程中遇到的困难及解决方案,以及由此获得的经验。
关键字 MFC,应用程序框架,应用程序向导,消息映射,菜单,对话框,绘图,计算器,1.MFC系统开发设计思想MFC是微软基于Windows平台下的C++类库集合。
MFC包含了所有与系统相关的类,其中封装了大多数的API函数,提高了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了Windows应用程序的开发工作。
MFC封装了大部分Windows API函数、数据结构和宏,以面向对象的类提供给程序员,并提供了一个应用程序框架,简化和标准化了Windows程序设计。
应用程序框架是一组类构造起来的大模型。
它的出现使得开发人员不需要构建程序框架结构,其初始代码可以由应用程序向导自动完成。
MFC应用程序向导在帮助程序员创建应用程序框架的同时,自动生成了这个MFC应用程序框架所需要的全部文件。
然后程序员;利用资源管理器和类向导(Class Wizard),为程序添加实现特定功能的代码,以实现应用程序所要求的功能。
2.MFC系统功能及系统设计介绍在VC++中,可以创建3类典型的Windows应用程序,它们都是通过MFC应用程序向导(App Wizard)创建的:基于对话框的应用程序、单文档界面应用程序、多文档界面应用程序。
本文介绍前两种。
(1)基于对话框的应用程序对话框是一种特殊类型的窗口,绝大多数Windows程序都通过对话框与用户进行交互。
基于mfc的实验报告
基于mfc的实验报告摘要本实验旨在通过使用MFC(Microsoft Foundation Classes)开发框架,实现一个简单的图形化界面程序。
通过这次实验,我深入理解了MFC框架的基本原理和开发流程,并成功完成了一个简单的图形化界面程序。
1. 引言MFC是微软公司开发的一套C++类库,用于创建Windows平台上的应用程序。
它建立在Windows API之上,简化了Windows操作系统的编程方式。
MFC 提供了一系列的类和函数,包括窗口(Window)、对话框(Dialog)、消息映射(Message Map)等,极大地简化了Windows应用程序的开发过程。
2. 实验目的本实验主要目的是熟悉MFC框架的基本原理和开发流程,实现一个简单的图形化界面程序。
通过本实验,能够掌握MFC框架中的窗口创建、消息处理、界面设计等基本概念和操作。
3. 实验过程3.1 环境配置首先,需要在计算机上安装Visual Studio和MFC组件。
打开Visual Studio,创建一个新的MFC应用程序项目,并选择对话框类型作为项目的基础结构。
3.2 窗口创建在MFC应用程序中,窗口是最基本的界面单位。
通过菜单选择“添加类”的方式,创建一个新的对话框类,并继承自CDialog类。
在新建的对话框类中,可以定义与界面相关的成员变量和控件。
3.3 控件添加在对话框设计界面中,可以通过拖拽和调整控件的方式,向对话框中添加各种控件,如按钮、文本框、列表框等。
每个控件都有自己的属性和事件响应函数。
3.4 消息映射消息映射是MFC框架的核心概念之一。
通过消息映射,可以将用户的操作(如点击按钮)与特定的函数关联起来。
在对话框类中,可以通过DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP宏定义来实现消息映射关系的建立。
3.5 编译和运行完成界面设计和消息映射后,即可对程序进行编译和运行。
在编译过程中,MFC 会自动将资源文件编译成可执行的文件。
MFC基本应用程序的建立
MFC基本应用程序的建立C++面向对象程序设计语言是在C语言的基础上发展起来的,它与传统的程序设计方式不同,而是一种新的程序设计范型。
它对降低软件的复杂性,改善其重要性和维护性、提高软件的生产效率,有着十分重要的意义。
因此面向对象程序设计被普遍认为是程序设计方法的一场实质性的革命Visual C++是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境,它使C++语言在Windows平台上得到了有效的可视化的应用。
C++编程都是在控制台方式下运行的,这样可以在不需要太多涉及Visual C++的细节而专心于C++程序设计的本身。
但是,当C++及程序设计基本掌握后,我们就不能仅停留在控制台方式下运行,因为学习C++的目的在于应用,从本章开始,将着重讨论如何用Visual C++的强大功能开发Windows应用程序。
我们将看到,展现在你面前的是彩色亮丽的图形图像及千变万化的可移动的文字、影像界面。
像市场流行的游戏软件、企事业管理、图形图像处理、银行、电信、教育及各大小网站的软件编程和网页设计等。
本章一、二节是Windows编程和MFC编程,不是我们重点掌握的,大家可以自己看看,也是有帮助的。
我们从第三节(150页):使用MFC AppWizard(应用程序向导)开始讲。
前面一、二节中需要大家掌握的是:1、Windows应用程序上机编程操作步骤(C++上机编程操作步骤,教材140页)2、理解Windows编程特点中的:消息驱动机制概念、图形设备接口概念、基于资源的程序设计概念、动态连接库概念、进程和线程的概念、阅读147页MFC 应用程序并理解其代码(146—149页)(做为讨论题留给大家)实际上,在Visual C++6.0中,我们不需要加入更多的Windows程序代码,就能创建所需要的应用程序,这就是我们要着重掌握的MFC AppWizard(应用程序向导),它能为用户快速、高效、自动地生成一些常用的标准程序结构和编程风格,它们被称为应用程序框架类型(MFC AppWizard提供的各应用程序框架类型150页说明)其中:MFC AppWizard(exe)是我们常用的(一般MFC的Windows应用程序),它包含用户最常用、最基本的3种应用程序类型:单文档、多文档和基于对话框的应用程序。
mfc实验报告
mfc实验报告MFC实验报告引言:MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的C++类库,它提供了一套丰富的类和函数,使开发者能够更加方便地创建图形界面、处理用户输入和输出、管理窗口等。
本实验旨在通过使用MFC库来开发一个简单的图形界面应用程序,以展示MFC的基本功能和使用方法。
一、实验准备在开始实验之前,我们需要安装Visual Studio软件,该软件集成了MFC库。
通过Visual Studio,我们可以轻松创建一个MFC项目,并使用其中的工具和组件来开发我们的应用程序。
二、创建MFC项目1. 打开Visual Studio软件,选择“创建新项目”。
2. 在弹出的对话框中,选择“Visual C++” -> “MFC” -> “MFC应用程序”。
3. 输入项目名称和保存路径,点击“确定”按钮。
4. 在下一个对话框中,选择“单文档”或“多文档”应用程序,根据需要进行选择。
5. 点击“完成”按钮,Visual Studio将自动生成一个基本的MFC应用程序框架。
三、设计图形界面MFC提供了丰富的工具和组件,使我们能够轻松地设计出漂亮的图形界面。
在本实验中,我们将创建一个简单的计算器应用程序作为示例。
1. 在Visual Studio的资源视图中,找到“Dialog”文件夹,双击打开“MainDialog”对话框。
2. 在对话框上拖拽和调整按钮、文本框等控件,设计出计算器的布局。
3. 双击每个按钮控件,添加相应的点击事件处理函数,实现计算器的功能逻辑。
四、添加功能逻辑1. 在Visual Studio的“类视图”中,找到“MainDialog”类,双击打开对应的源文件。
2. 在源文件中,找到“BEGIN_MESSAGE_MAP”和“END_MESSAGE_MAP”之间的区域,在其中添加按钮点击事件的处理函数。
3. 在处理函数中,根据按钮的功能,编写相应的逻辑代码。
实验六 MFC基本应用程序的建立
实验六MFC基本应用程序的建立
一、实验目的:
(1) 了解Windows程序设计;
(2) 理解Windows编程特点;
(3) 熟悉用AppWizard(exe)创建单文档(SDI)、多重文挡(MDI)以及基于对话框(Dialog)应用程序的方法;
(4) 了解单文档(SDI)、多重文挡(MDI)以及基于对话框(Dialog)机制在编程、功能等方面的差异。
二、实验内容
(1)用Visual C++分别设计出不用编写一行代码的文本编辑器(一个基于单文挡,一个基
于多重文挡);
(2)在单文档应用程序的基础上,设计一个对话框,用于学生成绩的输入:要求输入学
生姓名、学号、性别以及3门课程的成绩,单击【输入】按钮,将显示学生基本信
息到多行的编辑框中;单击【全部显示】按钮,将显示学生基本信息和成绩到多行
的编辑框中;另外,当用户在编辑框中输入“课程1”、“课程2”、“课程3”成绩后,单击【计算平均分】按钮,将显示这三个成绩的平均分。
在该对话框中要用到的控
件:静态文本、编辑框(单行、多行)、单选按钮、复选按钮、组框、按钮等;
三、实验要求
掌握Visual c++框架有关的控件、文挡,视图等概念,学会如何在Visual c++中建立简单的工程及调试程序的方法。
实验8:MFC基本应用程序的建立 - Visual C++程序设计实验报告
计算机与信息技术学院综合性、设计性实验报告一、实验目的1.理解Windows编程特点,比较命令控制台项目与Windows编程的异同。
2.了解MFC应用程序的消息映射,数据映射,运行时类型检查和诊断信息转储机制。
3.掌握用AppWizard(exe)创建SDI,MDI以及基于对话框的应用程序的方法。
4.了解SDI和MDI编程,功能等方面的异同。
5.掌握使用项目工作区窗口的ClassView 页面的为一个类添加成员的方法。
6.掌握用ClassWizard映射消息的方法等。
二、实验仪器或设备电脑型号:方正Founder PC 台式电脑操作系统:Windows XP 专业版32位SP3 ( DirectX 9.0c )实验平台:Microsoft Visual C++6.0(SP6)处理器:AMD Athlon(速龙) II X2 255 双核内存:1791 MB主硬盘:西数WDC WD3200AAJS-22L7A0 ( 318 GB / 7200 转/分)显卡:NVIDIA GeForce 6150SE nForce 430 ( 256 MB )显示器:Topview(冠捷) LCDE980 FG981 ( 19.1 英寸)网卡:瑞昱PCIe GBE Family Controller三、总体设计(设计原理、设计方案及流程等)(1)在一个默认的单文档应用程序Ex_SDI中通过映射计时器消息实现这样的功能:无论在Ex_SDI应用程序窗口的客户区中单击鼠标左键或右键,都会弹出消息对话框,显示鼠标左键或右键的单击次数。
Ex_SDI运行结果如图所示:四、实验步骤(包括主要步骤、代码分析等)1.创建工作文件夹打开计算机,在“E:Visual C++实验”文件夹中创建一个新的子文件夹“试验8”。
2.创建单文档应用程序Ex_SDI(1)创建单文档应用程序Ex_SDI的具体步骤如下。
(2)启动Visual C++6.0。
MFC实验报告 马毅
MFC可视化程序设计实验报告一、实验目的1)加深理解Windows程序设计的基本概念。
2)基于单文档的应用程序的创建3)学会对话框的创建二、实验环境Microsoft Windows XPMicrosoft Visual C++ 6.0三、实验过程与分析1) 、创建一个单文档窗口代码写完编译成功,第一次执行发现错误一开始实验中多有少写代码的情况,比如“;”经常漏掉最大的一个毛病是忘记引入一个头文件导致一直编译都有错误经过检查发现是缺少了#include <StdAfx.h> 这个头文件,引入这个头文件后,问题就解决了。
这个问题的原因是因为选择了共享dll库导致的将dll库修改成静态的问题解决了。
功能都能正常实现2)、在模态与非模态对话框的创建中,运用MSDN 结合孙鑫老师的视频讲义。
很轻松的就可以把代码补充完整。
功能实现上也能实现实验要求的水平实验2的部分实验结果截图:模态对话框:非模态对话框:文件对话框:计算器:背景颜色设置3)、实验三:菜单设置:4)、实验四实验四目前我只完成了画图部分,因为学艺不精。
画图部分的功能完全能实现,能达到实验要求,可以设置画笔的宽度和画笔的颜色。
部分实验代码参考了孙兴老师的教程。
实验过程中的截图如下:设置线宽:设置画笔颜色画图的效果:总体来说这个实验是做完了。
值得思考的就是没有把任意变形的图形添加进去总结:通过对MFC课程的学习我掌握了MFC开发控件的基础能力,利用基本的菜单和窗体工具可以创建一些自己想要的窗体和控件,并按照自己的意愿设置属性。
为以后的更高级的语言学习做准备。
思考题1)Windows程序设计中窗口过程的作用是什么?是有谁调用的?窗口在程序里面如何工作的呢?每个窗口都是一个特定窗口类的实例。
窗口类是一个描述窗口各种特性,比如说显示风格,所属应用程序,图标,光标样式等。
每个窗口都有一个特别的函数来处理自己的接收到的消息。
这个函数被称为窗口过程函数,这一过程函数的原型是被定义好了的,而具体实现是由作为程序员的你来完成的。
实验报告2
实验报告填写时间:Visual C++ 实用教程课程名称MFC基本应用程序的建立实验名称姓名学号专业年级1、实验目的:初步了解并熟悉MFC基本应用程序的建立二、实验内容在一个默认的单文档应用程序中实现功能:在应用程序窗口的客户区中单击左键或右键,都会弹出对话框提示客户已经单击左键或右键的次数。
三、实验步骤:1.创建工作文件夹在桌面建立文件夹“VisualC++”。
2.创建单文档应用程序Ex_SDI(1)启动VC6.0,选择“文件” →“新建”,选择“MFC AppWizard(exe)”项目.(2)在工程那个编辑框中输入“EX_SDI”,将项目文件夹定位到“桌面\ VisualC++”.(3)单击确定,显示“应用程序向导”,选择单个文档,单击完成。
3.添加数据成员(1)展开工作区窗口ClassView中的所有结点(2)单击CEx_SDiView类结点,单击Add Member Variable,添加数据成员m_nLButton和m_nRButton。
(3)在ClassView中展开CEx_SDIView的结点,双击CEx_SDIView,在CEx_SDIView中添加成员变量初始化代码。
CEx_SDIView::CEx_SDIView(){m_nLButton=m_nRButton=0;}(4)添加消息映射a.按Ctrl+W打开MFC ClassWizard 对话框b.在Classname 中选定类名CEx_SDIView;在ObjectIDs中选定CEx_SDIView,在Messages中选定WM_LBUTTONDOWN.c.点击Add Function,在单击Add Codes,转向文档窗口,定位到OnButtonDown函数代码处,添加;void CEx_SDIView::OnRButtonDown(UINT nFlags, CPoint point){m_nRButton++;SetTimer(2,50,NULL);CView::OnRButtonDown(nFlags, point);}d.按相同方法,添加右键的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机与信息技术学院综合性、设计性实验报告专业:计算机科学与技术年级/班级:10计科一班一、实验目的:(1)了解Windows的基本编程特点(2)会使用MFC AppWinzard(exe)创建单文档应用程序(3)学会添加消息映射等简单功能(4)掌握用项目工作区的ClassView页面添加数据成员的方法(5)学会和掌握调试的一般步骤和过程二、实验内容:(1)在一个默认的单文档应用程序Ex_SDI中通过映射计时器消息实现这样的功能:无论在Ex_SDI应用程序窗口的客户区中单击鼠标左键或右键,都会弹出“消息”对话框,显示左键或右键的单击次数。
(2)使用调试器对上述程序的流程和鼠标单击次数进行调试。
三、实验步骤:1、创建工作文件夹打开计算机,在“G:\Visual C++程序\实验”文件夹中创建一个新的子文件夹“实验8”。
2、创建单文档应用程序Ex_SDI创建单文档应用程序Ex_SDI的具体步骤如下:(1)启动Visual C++(2)选择“文件”→“新建”菜单命令,显示“新建”对话框。
从列表中选中MFC AppWinzard(exe)的项目类型项。
(3)在“工程”编辑框中输入应用程序项目名称Ex_SDI,并将项目文件夹定位到“D:\Visual C++程序\实验\实验8”。
(4)单击“确定”按钮,显示“应用程序向导”对话框。
选中单个文档(Single Document,简称SDI)应用程序类型。
单击“完成”按钮,系统将显示向导创建的信息,单击“确定”按钮将自动创建此应用程序。
(5)编译运行。
具体操作如下:运行结果如下:3、添加数据成员:添加数据成员的的具体步骤如下:(1)展开项目工作区窗口ClassView中的所有类结点。
(2)用鼠标右键单击CEx_SDIView类结点,从弹出的快捷菜单中选择“Add Member Variable(添加成员变量)”,弹出如图所示的“Add Member Variable”对话框。
(3)在Variable Type框中输入成员变量类型int,在Variable Name框中输入变量名称m_nLButton。
保留默认的访问方式(Acess)为Public。
单击“确定”按钮,这样,就会在CEx_SDIView中添加一个公有型成员变量m_nLButton,变量类型为int。
(4)按相同的方法,在CEx_SDIView中添加一个公有型成员变量m_nRButton,变量类为int.(5)在项目工作区窗口Class View中,展开CEx_SDIView的所有结点,双击构造函数CEx_SDIView()结点,在CEx_SDIView类的构造函数中添加下列成员变量初始化代码:CEx_SDIView::CEx_SDIView(){m_nLButton=m_nRButton=0;}4、添加消息映射:添加消息映射的具体步骤如下:(1)按“Ctrl+W”快捷键打开“MFC ClassWizard”对话框。
(2)在Class name组合框中,将类名选定为CEx_SDIView。
此时,Object IDs和Messages列表内容会相应的改变。
在Object IDs列表框中选定CEx_SDIView,而在Messages列表框中选定WM_LBUTTOMDOWM消息。
(3)双击Messages列表中的WM_BUTTOMDOWM消息或者单击“Add Function”按钮,都会在CEx_SDIView类中添加该消息的映射函数OnLButtonDowm,同时在Member functions列表中显示这一消息映射函数和被映射的消息。
映射WM_LBUTTOMDOWN消息的结果如下:(4)单击“Edit Code”按钮后,ClassWizard对话框退出,并转向文档窗口,定位到OnLButtonDown函数源代码处,添加以下代码:void CEx_SDIView::OnLButtonDown(UINT nFlags, CPoint point){//计数变量m_nLButton加1,然后启动计时器m_nLButton++;SetTimer(1,50,NULL);CView::OnLButtonDown(nFlags, point);}(5)按相同的方法为CEx_SDIView类添加WM_RBUTTOMDOWN消息映射,并在映射函数中添加下列代码:void CEx_SDIView::OnRButtonDown(UINT nFlags, CPoint point){//计数变量m_nRButton加1,然后启动计时器m_nRButton++;SetTimer(2,50,NULL);CView::OnRButtonDown(nFlags, point);}(6)按类似的方法为CEx_SDIView类添加一个WM_TIMER消息映射,并在映射函数中添加下列代码:void CEx_SDIView::OnTimer(UINT nIDEvent){CString str; //创建一个字符串类对象//通过判断nIDEvent的值来确定是单击鼠标左键还是右键if(nIDEvent==1)str.Format("你已单击鼠标左键 %d 次!",m_nLButton);if(nIDEvent==2)str.Format("你已单击鼠标右键 %d 次!",m_nLButton);if((nIDEvent==1)||(nIDEvent==2)){KillTimer(nIDEvent); //先要关闭计时器MessageBox(str,"报告");}CView::OnTimer(nIDEvent);}(7)编译运行并测试,结果如图:5、设置断点在设置断点之前,首先要保证程序中没有语法错误,所谓断点就是告诉调试器在何处暂时中断程序的进行,以便查看程序的状态以及浏览和修改变量的值等。
(1)在项目工作区的ClassView页面中,展开CEx_SDIView下的所有结点。
(2)双击OnLButtonDown结点,会在文档窗口中打开并定位到该消息映射代码处,在代码行“m_nLButton++;”中单击鼠标。
(3)用下列3种方式之一设置断点,会在代码行“m_nLButton++;”的最前面的窗口页边距上有一个深红色的实心圆块,如图:①按快捷键F9②在Build工具栏上单击按钮③在需要设置(或清除)断点的位置上单击鼠标右键,在弹出的快捷菜单中选择“Insert/Remove Breakpoint”命令6、控制程序运行具体步骤如下:(1)选择“组建”菜单→“开始调试”子菜单的“去”命令,或单击“编译微型条”中的按钮,自动调试器。
(2)程序运行后在客户区单击鼠标左键,由于程序中该消息的映射函数中设置了断点,因此程序会在该断点处停顿下来。
(3)这时可以看到有一个黄色小箭头,它指向即将执行的代码。
而且,原来的“编译”菜单会变成“Debug”)(调试)菜单,如图所示。
这是Debug菜单其中4条命令Step Into、Step Over、Step Out和Run to Cursor是用于控制程序运行的,其含义是:①Step Over的功能是运行当前箭头指向的代码(只运行一条代码)②Step Into的功能是如果当前箭头所指向的代码是一个函数的调用,则用StepInto进入该函数进行单步执行③Step Out的功能是如果当前箭头所指向的代码是在某一函数内,用它是程序运行至函数返回处④Run to Cursor的功能是是程序运行至光标所指的代码(4)选择“Debug”菜单中的“Stop Debugging”命令或直接按快捷键Shift+F5或单击“编译微型条中的”按钮,启动调试器。
7、查看和修改变量的值为了更好地进行程序调试,调试器还提供了一系列的窗口,用于显示各种不同的调试信息,可借助“查看”菜单下的“调试窗口”子菜单访问它们,事实上,当启动调试器后,Visual C++的开发环境会自动显示出Watch 和Variables两个调试窗口,如图:除了上述窗口外,调试器还提供QuickWatch、Memory、Registers、Call Stack以及Disassembly等窗口。
但对于变量值的查看和修改,通常可以使用QuickWatch、Watch 和Variables这3个窗口。
以下步骤使用这三个窗口来查看、修改m_nLButton或m_nRButton值。
⑴启动调试器,程序运行后,单击鼠标左键,程序停顿下来。
⑵如上图,可以看到Variable窗口有3个页面:Auto、Locals和This。
这些页面内均有“名称”和“值”两个域,调试器自动填充它们。
⑶在“调试”工具栏上,单击按钮或快捷键F10,箭头指向了下一句代码“SetTimer(1,50,NULL);”,同时,Variable窗口中的m_nLButton值变成了1。
实际上,若仅需要快速查看变量或表达式的值,则只需要将鼠标直接放在代码中该变量或表达式上,片刻后,系统会自动弹出一个小窗口显示出该变量或表达式的值。
⑷在Watch窗口中,单机左边“名称”域下的空框,输入m_nRButtoon,按Enter键,相应的值会自动出现在“值”域中,同时,又在末尾处出现新的空框,添加新的变量或表达式如图所示:需要说明的是,Watch窗口有4个页面:Watch1、Watch2、Watch3和Watch4,在每一个页面中有一系列用户要查看的变量或表达式,用户可以将一组变量或表达式在同一个页面中。
⑸选择“调试”→“QuickWatch”命令或按快捷键Shift+F9或者在“调试”工具栏上单击按钮,将弹出如图所示的“QuickWatch”窗口。
其中,“表达式”框可以让用户输入变量名或表达式,然后按Enter键或单击“重置”按钮,就可以在“当前值”列表中显示相应的值,若要修改其值的大小,则可按Tab键或在列表项的“Value”域中双击该值,再输入新值按Enter键就可以了。
单击“添加监视”按钮可将刚才输入的变量名或表达式及其值显示在“Watch”窗口中。
从上述过程可以看出,调试一般按照这样的步骤进行:修正语法错误→设置断点→启用调试器→控制程序运行→查看和修改变量的值。
8、退出Visual C++9、实验总结与体会这次试验我认识了Windows的基本编程特点并学会使用MFC AppWinzard(exe)创建简单的单文档应用程序和添加消息映射等简单功能,还会通过打开ClassView页面为程序代码添加数据成员,并进一步的熟悉和掌握了调试的一般步骤和过程,在默认的单文档应用程序Ex_SDI中通过映射计时器消息实现了实验所要求的功能,并使用调试器对流程和鼠标次数进行了调试,到达了实验目的,以后我应该更加勤于上机实验,把理论付诸实践。