VC++程序设计实验报告
第二篇:VC程序设计课程实验报告要求(模板)
VC程序设计课程实验报告
实验题目:使用几种常用资源
班级 生物医学08(1)班 姓名 张春香 学号 2008023005 日期 2011年6月19日
一、 需求分析
(一)实验目的
1.了解 学会VC++ 6。0 集成环境 操作界面的使用
2.使用MFC进行可视化的编程
3.理解文档/视程序的结构,MFC消息映射机制,理解发送给窗口的消息是如何被MFC框架 通过窗口句柄映射表和消息映射表来用窗口类的函数进行响应的。
4.了解CDocument类的串行化存储功能保存与加载数据和MFC框架程序的文档类和视类的关系
5. 学会使用ClassWizard添加成员变量创建新的类和删除一个类和添加消息
(二)实验内容和要求
1. 如图编写一个对话框应用程序,a)单击按钮1时,按钮上的文字“Show1”现就变成“Show2”; 参照书本实例 228页例题9-5)。如下图所示
编写一个单文档(SDI)应用程序,对SDI的四个类CxxxApp,CxxxDoc,CxxxView,CMainFrame分别添加一个消息,模拟一下SDI的消息传递过程。
2. 编写一个单文档应用程序,点击菜单项增加硬币,则硬币增加,点击菜单项减少硬币,则硬币减少.如下图所示:
1)首先如下图所示建立一个单文档应用程序:
2)然后在已有的菜单上添加菜单项,“增加硬币”,“减少硬币”菜单条目
3)然后类向导(ClassWizard),鼠标移动到到菜单条目“增加硬币”,然后点击鼠标右键,点击类对类向导(ClassWizard),添加菜单项的消息响应,在类向导中,Class Name选择文档类(如:CCoinShowDoc),Object IDs中选中 ID号为“增加硬币”的ID号(如IDM_ADDCOIN),Message选择COMMAND消息,然后点击按钮Add Function,然后点击Edit Code。按照上述方法同样添加“减少硬币”菜单条目消息的响应
4)然后在CCoinShowDoc类的头文件和源文件中添加下列代码.
5)然后在类CCoinShowView中添加代码
6)程序编译,运行。
(三)实验步骤
1.使用AppWizard应用程序向导创建一个MFC应用程序的步骤(参见实验使用几种常用的控件)
2.用ClassWizard创建一个类的步骤(把一个类添加到MFC应用程序,该类既可以扩展一个MFC类,也可以独立存在)
a. 扩展一个已存在的MFC类
1) 单击Developer Studio的View / ClassWizard菜单命令,打开MFC ClassWizard对话框,
然后单击Add Class(添加类)按钮(见图7-1 ),将出现一个下拉菜单,从中应选择New?以打开New Class(新类)对话框。
2) 输入新类的名字,在新类的名字前面添加一个“ C”(当创建类的.h和.cpp文件时,
Class Wizard将删除这个“C”),然后从可用的MFC类列表中选择一个基类(见图7-2 )。如果选择CRecordSet,ClassWizard还将引导用户通过捆绑一个数据库表到新类所必须的步骤。要从CWnd类派生,可以选择“generic CWnd”;要派生CSplitterWnd,选择“splitter”。如果想派生的MFC类没有列出(诸如用CToolBar),则选择一个类似的名字(如CToolBar Ctr l ) ,然后编辑由此产生的文件。
b. 创建一个非MFC类
如果不想用一个MFC类作为基类,则单击环境的Insert/New Class菜单命令,以打开一个
选择性的New Class对话框。这一选择性版增加了用以指定Class Type的组合框。选择Gene r ic Type要求指定自己的基类(如果有的话)(见图7-3)。
3.用ClassWizard删除一个类的步骤
1) 首先,必须从文件的工程列表和工程的子目录中删除ClassWizard创建的.cpp和 h文件。
2) 然后删除.clw文件,ClassWizard对每一个在各自的.clw文件中创建的类保持一个记录。不过只要删除.clw文件,下次调用ClassWizard时,它就会告诉你没有找到.clw文件,并提问是否想创建一个新的,回答Yes,则ClassWizard将用工程目录中的. h文件建立一个新的.clw文件。
二:程序设计
1. 框架类型选择依据
2. 指明要添加代码的位置。
BEGIN_MESSAGE_MAP(CEditBoxDlg, CDialog)
//{{AFX_MSG_MAP(CEditBoxDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_Exit, Exit)
ON_BN_CLICKED(IDC_show1, Onshow1)
ON_BN_CLICKED(IDC_clear1, Onclear1)
ON_BN_CLICKED(IDC_show2, Onshow2)
ON_BN_CLICKED(IDC_clear2, Onclear2)
ON_BN_CLICKED(IDC_Transfer, OnTransfer)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditBoxDlg message handlers
BOOL CEditBoxDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
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);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CEditBoxDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CEditBoxDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CEditBoxDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CEditBoxDlg::Exit()
{
// TODO: Add your control notification handler code here
}
void CEditBoxDlg::Onshow1()
{
// TODO: Add your control notification handler code here
m_Edit1.SetSel(0,-1);
m_Edit1.ReplaceSel("This is the first EditBox.");
}
void CEditBoxDlg::Onclear1()
{
// TODO: Add your control notification handler code here
m_Edit1.SetSel(0,-1);
m_Edit1.ReplaceSel("");
}
void CEditBoxDlg::Onshow2()
{
// TODO: Add your control notification handler code here
m_Edit2.SetSel(0,-1);
m_Edit2.ReplaceSel("This is the second EditBox.");
}
void CEditBoxDlg::Onclear2()
{
// TODO: Add your control notification handler code here
m_Edit2.SetSel(0,-1);
m_Edit2.ReplaceSel("");
}
void CEditBoxDlg::OnTransfer()
{
// TODO: Add your control notification handler code here
m_Edit1.SetSel(0,-1);
m_Edit1.Copy();
m_Edit2.SetSel(0,-1);
m_Edit2.ReplaceSel("");
m_Edit2.Paste();
}
3列出要添加的代码及代码分析
三:调试分析
3):调试中遇到的问题及对问题的解决方法;
答:遇到的问题有很多变量没有定义,一些是因为大小写的原因,另外是忘记定义。解决方法自习检查分析。
4):心得体会及收获小结
答:了解 学会VC++ 6。0 集成环境 操作界面的使用,使用MFC进行可视化的编程,理解文档/视程序的结构,MFC消息映射机制,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的函数进行响应的。了解CDocument类的串行化存储功能保存与加载数据和MFC框架程序的文档类和视类的关系, 学会使用ClassWizard添加成员变量创建新的类和删除一个类和添加消息
四:使用说明及测试结果
1)程序结果:
2)程序中会犯大小写的错误。导致程序调试不出。仔细修改就可以。还有一些参数的设置,有要求,要根据需要来设置达到理想的结果。