您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 中南大学数学院面向对象课程设计报告
中南大学《面向对象程序设计》上机报告题目:对话框学生姓名:学号:专业班级:指导老师:数学科学与计算技术学院2011年11月一、上机目的、内容:学习向对话框控件联接数据成员及其实现机理;向对话框控关联控件类;利用对话框类的成员函数向控件发送消息和获取对话框控件的类指针。明白如何让对话框上的文本框在程序启动后立即获得焦点,如何利用SetWindowLong改变窗口的回调函数,通过改变文本框的默认回车处理方式进行演示。最后利用对话框制作一个简单的计算器。二、上机程序设计具体内容:对话框运用对话框制作计算器:1.1创建工程(单文档)1.2工程的“资源视图”处—右击—添加—资源—Dialog—新建1.3左键双击上图、设置类名等。1.4添加菜单项,使得点击菜单时出现这个窗口:(1).资源视图—menu—双击IDR_MAINFRAME(2).添加菜单名称为“对话框”(3).在右边出现的属性中将Popup设置为“false”(4).将ID设置为1.5右击“对话框”—添加时间处理器—放在View类里编辑—添加编辑1.6在view类里添加所需要的头文件:#includeTestDlg.h1.7在对话框上面添加一个按钮(1).在最右边点击“工具箱”(2).将一个按钮拖到对话框—右击按钮—选择属性—在属性栏将ID改为IDC_BTN_ADDcaption改为Add(3).添加几个静态的文本框控件(选择一个控件,再按住Ctrl进行拖动就能“复制”)(4).利用成员变量操控3个编辑框右击文本框—添加变量—将类别改为value—将变量类型改为int—设置变量名—完成1.8实现“Add”功能右击选择添加事件处理器,在TestDialog里这样加法就实现了1.9再添加3个按钮齐全加减乘除功能:同样将其ID分别改为IDC_BTN_ADDIDC_BTN_JIANIDC_BTN_CHENGIDC_BTN_CHU分别添加事件处理器UpdateData();//数据切换这样加减乘除的功能就都有了,但是由于我们定义其变量的时候是int型,所以可能导致除数本来不为0,但结果为0。例如:1/2等于0。最后程序结果图:三、上机程序设计心得:我们通过学习面向对象程序设计,发现在VS2008中添加MFC中消息处理函数和VC6.0是不一样的。我们只能通过类视图,右键需要添加处理函数的类,选择属性,在属性窗口中,单击“消息”按钮,然后在消息列表框中,选择需要添加的消息。而在运用MessageBox时,我们需要用到一种中间类型TEXT对字符进行转换。这些都是我们所遇到的问题,但我们都可以通过查询MSDN进行解决。四、附录:(3)源程序主要代码//MainFrm.cpp:CMainFrame类的实现#includestdafx.h#includeMyBole.h#includeMainFrm.h#ifdef_DEBUG#definenewDEBUG_NEW#endif//CMainFrameIMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_CREATE()END_MESSAGE_MAP()staticUINTindicators[]={ID_SEPARATOR,//状态行指示器ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};//CMainFrame构造/析构CMainFrame::CMainFrame(){//TODO:在此添加成员初始化代码}CMainFrame::~CMainFrame(){}intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){if(CFrameWnd::OnCreate(lpCreateStruct)==-1)return-1;if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)){TRACE0(未能创建工具栏\n);return-1;//未能创建}if(!m_wndStatusBar.Create(this)||!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))){TRACE0(未能创建状态栏\n);return-1;//未能创建}//TODO:如果不需要工具栏可停靠,则删除这三行m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);return0;}BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs){if(!CFrameWnd::PreCreateWindow(cs))returnFALSE;//TODO:在此处通过修改//CREATESTRUCTcs来修改窗口类或样式returnTRUE;}//CMainFrame诊断#ifdef_DEBUGvoidCMainFrame::AssertValid()const{CFrameWnd::AssertValid();}voidCMainFrame::Dump(CDumpContext&dc)const{CFrameWnd::Dump(dc);}#endif//_DEBUG//CMainFrame消息处理程序//MyBole.cpp:定义应用程序的类行为。#includestdafx.h#includeMyBole.h#includeMainFrm.h#includeMyBoleDoc.h#includeMyBoleView.h#ifdef_DEBUG#definenewDEBUG_NEW#endif//CMyBoleAppBEGIN_MESSAGE_MAP(CMyBoleApp,CWinApp)ON_COMMAND(ID_APP_ABOUT,&CMyBoleApp::OnAppAbout)//基于文件的标准文档命令ON_COMMAND(ID_FILE_NEW,&CWinApp::OnFileNew)ON_COMMAND(ID_FILE_OPEN,&CWinApp::OnFileOpen)//标准打印设置命令ON_COMMAND(ID_FILE_PRINT_SETUP,&CWinApp::OnFilePrintSetup)END_MESSAGE_MAP()//CMyBoleApp构造CMyBoleApp::CMyBoleApp(){//TODO:在此处添加构造代码,//将所有重要的初始化放置在InitInstance中}//唯一的一个CMyBoleApp对象CMyBoleApptheApp;//CMyBoleApp初始化BOOLCMyBoleApp::InitInstance(){//如果一个运行在WindowsXP上的应用程序清单指定要//使用ComCtl32.dll版本6或更高版本来启用可视化方式,//则需要InitCommonControlsEx()。否则,将无法创建窗口。INITCOMMONCONTROLSEXInitCtrls;InitCtrls.dwSize=sizeof(InitCtrls);//将它设置为包括所有要在应用程序中使用的//公共控件类。InitCtrls.dwICC=ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp::InitInstance();//初始化OLE库if(!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);returnFALSE;}AfxEnableControlContainer();//标准初始化//如果未使用这些功能并希望减小//最终可执行文件的大小,则应移除下列//不需要的特定初始化例程//更改用于存储设置的注册表项//TODO:应适当修改该字符串,//例如修改为公司或组织名SetRegistryKey(_T(应用程序向导生成的本地应用程序));LoadStdProfileSettings(4);//加载标准INI文件选项(包括MRU)//注册应用程序的文档模板。文档模板//将用作文档、框架窗口和视图之间的连接CSingleDocTemplate*pDocTemplate;pDocTemplate=newCSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CMyBoleDoc),RUNTIME_CLASS(CMainFrame),//主SDI框架窗口RUNTIME_CLASS(CMyBoleView));if(!pDocTemplate)returnFALSE;AddDocTemplate(pDocTemplate);//分析标准外壳命令、DDE、打开文件操作的命令行CCommandLineInfocmdInfo;ParseCommandLine(cmdInfo);//调度在命令行中指定的命令。如果//用/RegServer、/Register、/Unregserver或/Unregister启动应用程序,则返回FALSE。if(!ProcessShellCommand(cmdInfo))returnFALSE;//唯一的一个窗口已初始化,因此显示它并对其进行更新m_pMainWnd-ShowWindow(SW_SHOW);m_pMainWnd-UpdateWindow();//仅当具有后缀时才调用DragAcceptFiles//在SDI应用程序中,这应在ProcessShellCommand之后发生returnTRUE;}//用于应用程序“关于”菜单项的CAboutDlg对话框classCAboutDlg:publicCDialog{public:CAboutDlg();//对话框数据enum{IDD=IDD_ABOUTBOX};protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持//实现protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)END_MESSAGE_MAP()//用于运行对话框的应用程序命令voidCMyBoleApp::OnAppAbout(){CAboutDlgaboutDlg;aboutDlg.DoModal();}//CMyBoleApp消息处理程序//MyBoleDoc.cpp:CMyBoleDoc类的实现#includestdafx.h#includeMyBole.h#includeMyBoleDoc.h#ifdef_DEBUG#definenewDEBUG_NEW#endif//CMyBoleDocIMPLEMENT_DYNCREATE(CMyBoleDoc,CDocument)BEGIN_MESSAGE_MAP(CMyBoleDoc,CDocument)END_MESSAGE_MAP()//CMyBoleD
本文标题:中南大学数学院面向对象课程设计报告
链接地址:https://www.777doc.com/doc-2784546 .html