Windos编程实验指导书解析
更新时间:2024-06-15 00:07:01 阅读量: 综合文库 文档下载
实验一 框架的创建与消息处理
[程序1:Ex_SDIDemo] 创建一个默认的单文档应用程序 1.开始
选择“文件”?“新建”菜单,在弹出的“新建”对话框中选择“工程”标签,这时显示出一系列的应用程序项目类型; 2 .选择程序类型
(1) 从应用程序类型单个文档(Single Document,简称SDI)、 多重文档(Multiple Document ,简称MDI)和基本对话框(Dia log Based,基于对话框的应用程序)中选择“单个文档”。
(2) 决定应用程序中是否需要MFC的文档视图(“文档/查看体 系结构支持”)结构的支持。 (3) 选择资源所使用的语言 3. 简单创建
保留其他的默认选项,单击[完成]按钮出现一个对话框,显示出用户在步骤中作出的选择,单击[确定]按钮系统开始创建。
4. 编译并运行 到这里为止,用户虽然没有编写任何程序代码,但MFC AppW izard已经根据用户的选择内容自动生成基本的应用程序框架。
单击编译工具条 上的运行工具按钮
或按快捷键Ctrl+F5,系统开始编连并运行生成的单文档应用程序可执行文件Ex_SDIDemo.exe 请仔细查看生成的文件,理解文件内容。
【程序2:单文档消息映射】
生成一个单文档程序,实现鼠标右键单击,发送自定义消息,显示一个消息框.
【程序3:绘制直线鼠标消息实验】
生成一个单文档程序,实现用鼠标绘制直线的功能.
【程序4:按键消息实验】
生成一个单文档程序,当按下A键时,在消息窗口中显示“输入字符A!”。 .
实验二 图形与文本
【程序1:】
编写一个单文档的应用程序,在视图窗口中显示一行文本,要求文本颜色为红色,背景色为黄色。
【程序2:】
编写一个单文档的应用程序,在客户区使用不同的画笔和画刷绘制点、折线、曲线、圆角矩形、弧、扇形和多边形等几何图形。
【程序3:】
编写一个单文档的应用程序,在视图窗口中显示3个圆,通过使用不同颜色的画笔以及画刷来模拟交通红绿灯。
【程序4:】
编写一个单文档的应用程序,在视图窗口实现一行文本的水平滚动显示,要求每个周期文本为红、黄两种颜色,字体为宋、楷两种字体。
实验三 菜单和工具栏
【程序1:】
编写一个单文档,为程序添加主菜单“显示”,且“显示”菜单中包含“文本”和“图形”2个菜单项。当程序运行时,用户单击”文本“菜单项,可以在视图窗口中显示”我已经学会了如何设计菜单程序!“文本信息,单击“图形”菜单项,在视图窗口中画出一个红色的实心矩形。
【程序2:】
在程序1的基础上,新增菜单项添加控制功能,当“文本”菜单项被选中时,\图形“菜单项无效;当”图形“菜单项被选中时,”文本“菜单项无效。
【程序3:】
创建一个单文档,为该程序添加2个按钮到默认工具栏,单击第1个按钮,在视图窗口中弹出用于文件打开的”打开“对话框;单击第2个按钮,在消息框中显示”我已经学会使用默认工具栏了!“文本信息。
【程序4:】
在程序2上,新增工具栏,完成菜单里的对应的功能。并在状态栏中显示鼠标光标的坐标和当前系统时间。
实验四 对话框
[程序1:Ex_DlgDemo] 使用向导创建对话框应用程序
(1) 选择“文件”?“新建”菜单,在弹出的“新建”对话框中选择“工程”页面,选择MFC AppWizard(exe),在工程框中输入项目名Ex_DlgDemo。
(2) 单击[确定]按钮,在出现的“Step 1”对话框中选择“基本对话(框)”应用程序类型,如图所示。
(3) 单击[下一个]按钮,出现如图(右)所示的对话框,允许用户设置对话框的风格及ActiveX控件等特点的支持。
(4) 单击[下一个]按钮出现如图(左)所示的对话框,两个方面的选项可供用户选择:一是在源文件中是否加入注释用来引导用户编写程序代码,另一是使用动态链接库还是静态链接库。
(5) 保留默认选项,单击[下一个]按钮出现如图(右)所示的对话框。 (6) 单击[完成]按钮出现一个对话框,显示出用户在前面几个步骤中作出的选择内容,单击[确定]按钮系统开始创建。 应用程序可执行文件Ex_DlgDemo.exe,结果如图所示
[程序2:Ex_SDI] 在单文档程序中添加对话框资源 创建一个默认的单文档应用程序项目Ex_SDI。
(1) 选择“插入”?“资源”菜单,或按快捷键Ctrl+R打开“插入资源” 对话框中看到资源列表中存在Dialog项,若单击Dialog项左边的“+”号,将展开对话框资源的不同类型选项,表列出各种类型的对话框资源的不同用途。“插入资源”对话框 :
(2) 对展开的不同类型的对话框资源不作任何选择,选中“Dialog”,单击[新建]按钮,系统就会自动为当前应用程序添加了一个对话框资源。
系统为对话框资源自动赋给它一个默认标识符名称
使用通用的对话框模板创建新的对话框资源。对话框的默认标题为Dialog,有[OK]和[Cancel]两个按钮,这两个按钮的标识符分别为IDOK和IDCANCEL。
对话框模板资源所在的窗口称为对话框资源编辑,在这里可以通过控件工具栏和布局工具栏向对话框添加和布局控件,并可设置对话框的属性。 Visual C++6.0开发环境的工具栏具有“浮动”与“停泊”功能,图中的控件工具栏是处于“浮动”状态,通常将它拖放到窗口右侧,以便于操作。
在对话框模板处右击鼠标,从弹出的快捷菜单中选择“属性”菜单项,出现如图所示的对话框属性窗口。
对话框的属性有General(一般)、Styles(风格)、More Styles(更多)、Extended Styles(扩展风格)、MoreExtended Styles(更多扩展风格)等部分,这里仅介绍最常用的General属性。 对话框的General属性 项 目 ID框 标题框 字体按钮 Xpos/Ypos 菜单框 说 明 修改或选择对话框的标识符名称 输入对话框的标题名称,中英文均可,如“我的对话框” 单击此按钮可选择字体的种类(如宋体)及尺寸(如9号) 对话框左上角在父窗口中的X、Y坐标,都为0时表示居中 默认值为无,当对话框需要菜单时输入或选择指定的菜单资源
实验五 标准控件
[程序1:Ex_DlgCtrls] 用控件的编程方式来创建一个按钮
(1) 选择“文件”?“新建”菜单,在弹出的“新建”对话框中单击“工程”标签,选择MFCAppWizard(exe)的项目类型,在工程框中输入项目名Ex_DlgCtrls
(2) 单击[确定]按钮,在出现的“Step 1”对话框中选择“基本对话框)”应用程序类型,单击[完成]按钮,创建一个
默认的基于对话框的应用程序项目。
(3) 将项目工作区切换到ClassView页面,展开CEx_DlgCtrlsDlg类,右击CEx_DlgCtrlsDlg类名,弹出如图所示
的快捷菜单。
(4) 从快捷菜单中选择Add Member Variable,出现如图所示的对话框,在Variable Type(变量类型)编辑框中输
入CButto n(MFC按钮类),在Variable Name(变量名) 编辑框中输入要定义的CButton类对象名m_btnWnd。
(5) 单击[OK]按钮,这样Visual C++就会自动在CEx_DlgCtrlsDlg
类中添加该成员变量。
在项目工作区的ClassView页面中,双击OnInitDialog函数名,在该函数中添加下列代码: BOOL CEx_DlgCtrlsDlg::OnInitDialog() { CDialog::OnInitDialog();
… m_btnWnd.Create(\你好\ BS_PUSHBUTTON, CRect(20, 20, 120, 60), this, 201); // 创建 CFont *font = this->GetFont(); // 获取对话框的字体 m_btnWnd.SetFont(font); // 设置控件字体 return TRUE; // return TRUE unless you set the focus to a control }
(6) 编译并运行,结果如图所示
上述是通过编程方式实现控件的,但比较繁琐和复杂,一般是通过对话框模板中用编辑器指定控件。
[程序2:映射控件消息]
1. 在MFC中,映射一个控件消息是非常简便的,如下面的过程是对新添加的按钮控件映射BN_CLICKED(单击)消息。将项目工作区窗口切换到ResourseView页面,双击Dialog资源下的标识IDD_EX_DLGCTRLS_DIALOG,打开该对话框资源模板。删除“TODO: 在这里设置对话控制。”控件,添加一个按钮控件,保留其默认属性。如图所示。
2 按快捷键Ctrl+W,打开MFC ClassWizard对话框,查看“Class name”列表中是否选择了CEx_DlgCtrlsDlg,在IDs列表中选择IDC_BUTTON1,这是添加按钮后,系统自动为此按钮设置的默认标识符,然后在Messages框中选择BN_CLICKED消息。
3 单击[Add Function]按钮或双击BN_CLICKED消息,出现“Add Member Function”对话框,在这里可以输入成员函数的名称,系统默认的函数名为OnButton1。
4 单击[OK]按钮,在MFC ClassWizard的“Member functions”列表中将列出新增加的成员函数。 在此成员函数中添加下列代码: void CEx_DlgCtrlsDlg::OnButton1() { MessageBox(\你按下了\\\按钮!\} 5.
编译并运行,当单击[Button1]按钮时,就会执行OnButton1函数,弹出一个消息对话框。这就是按钮BN_CLICKED消息的映射过程,其他控件的消息也可以类似操作。
[程序3:]
写一个单文档程序,用菜单命令打开一个对话框,通过该对话框中的红色,绿色,蓝色单选按钮选择颜色,在视图中绘制不同颜色的矩形。
[程序4:]
写一个单文档程序,添加一个工具栏按钮。单击该按钮弹出一个对话框,通过该对话框中的红色,绿色,蓝色复选框选额颜色,在视图中输出一行文本。
[程序5:]
写一个对话框程序,根据用户从列表框中选择的线条样式,在对话框中绘制一个矩形。线条样式有水平线,垂直线,向下斜线,十字线等四种画刷。
[程序6:]
用组合框取代列表框,实现程序5一样的功能。
实验六 文档与视图
[程序1:] 文档数据和视图显示。
编写单文档程序,为文档对象添加数据成员recno(int类型),表示学号,stuname(CString类型)表示姓名,并在视图中输出文档对象中的内容。要求当按向上箭头或按向下箭头时,学号每次递增1或递减1,能在视图中反映学号变化。
(1)首先建立一个单文档程序。
(2)在文档类添加类的成员变量。 头文件: public: int recno; CString stuname;
并在实现文件里构造函数中初始化: CDemo1Doc::CDemo1Doc()
{ }
// TODO: add one-time construction code here recno=1;
stuname=\张三\
(3)在ClassWizard里面利用消息映射(Message Maps)在对应类中(如*View)添加对WM_KEYDOWN的响应函数。 添加下面阴影部分的代码。
void CDemo1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default //获取文档类的指针 CDemo1Doc* pDoc = GetDocument(); switch(nChar) { }
case VK_UP://上 //学号递增 pDoc->recno++; break;
case VK_DOWN: //下 //学号递减 pDoc->recno--; break; }
//刷新客户区,重新绘制 Invalidate();
CView::OnKeyDown(nChar, nRepCnt, nFlags);
(4)在视图类的OnDraw函数实现在客户区显示姓名和学号。 添加下面阴影的代码:
void CDemo1View::OnDraw(CDC* pDC) { CDemo1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
}
CString message;
message.Format(\学号:%d,姓名:%s\//在客户区显示姓名和学号 pDC->TextOut(0,0,message);
// TODO: add draw code for native data here
(5)调试运行。
按键盘里的向上键时学号递增,向下键时学号递减。
【程序2:单文档综合程序】
(1) 选择“文件”?“新建”菜单,在弹出的“新建”对话框中选择“工程”标签,选择MFC AppWizard(exe)的项目类
型,指定项目工作文件夹位置,输入项目名Ex_SDI2,单击[确定]按钮。
(2) 在向导的第一步中,将应用程序类型选为“单个文档”。
(3) 单击[下一个]按钮,出现向导的第二步对话框,在这里用户可以选择 程序中是否加入数据库的支持。
(4) 单击[下一个]按钮,出现向导的第三步对话框,允许用户在程序中加入复合文档、自动化、ActiveX控件的支持。
(5) 单击[下一个]按钮,出现向导的第四步对话框,对话框的前几项依次确定对浮动工具条、打印与预览以及通信网络等特性的支持。
(6)单击[高级]按钮,出现下图所示的对话框,分别用于文档模板字串资源内容和窗口风格的修改。
(7) 单击[关闭]按钮回到向导对话框,单击[下一个]按钮,出现如下图所示的对话框。
(8) 单击[下一个]按钮,出现对话框。在这里,用户可以对MFC AppWizard提供的默认类名、基类名、各个源文件名进行修改。
(9)添加一个描述学生信息的类。
选择vc++的菜单project-》Add to Project-》New,新建一个头文件StudentInfo.h
Student代码:
//StudentInfo.h 文件内容
class CStudentInfo : public CObject { CString strName; CString strNO; BOOL bMale; CTime tBirth; CString strSpecial; DECLARE_SERIAL(CStudentInfo) public:
// 姓名 // 学号 // 性别,是否为男 // 出生年月 // 专业 // 序列化声明
CStudentInfo() {};
CStudentInfo(CString name, CString id, BOOL male, CTime birth, CString special); void Serialize(CArchive &ar);
void Display(int y, CDC *pDC); // 在坐标为(0,y)处显示数据 };
选择vc++的菜单project-》Add to Project-》New,新建一个实现文件StudentInfo.cpp
//StudentInfo.cpp 文件内容 #include \
#include \
CStudentInfo::CStudentInfo(CString name, CString id, BOOL male, CTime birth, CString special) { strName = name; strNO = id; bMale = male; tBirth = birth; strSpecial = special; }
void CStudentInfo::Display(int y, CDC *pDC) { CString str, strSex(\女\ if (bMale) strSex = \男\ str.Format(\ %s %s %s %s\ strSex, tBirth.Format(\ pDC->TextOut(0, y, str); }
IMPLEMENT_SERIAL(CStudentInfo, CObject, 1) // 序列化实现
void CStudentInfo::Serialize(CArchive &ar) { if (ar.IsStoring()) ar<
(10)添加用于学生基本信息记录输入的对话框
在资源视图里,添加一个对话框资源,资源id为:IDD_DIALOG_student
双击对话框资源, 添加一个对话框的新类。、
向对话框资源里添加控件。
用classwizard绑定各个控件的变量。
(11)添加并处理菜单项
在Ex_SDI2Doc.cpp文件的开始处,添加包含CStuInfoDlg类的头文件包含。
在菜单资源的主菜单中添加顶层菜单项“学生基本信息(&S)”,在该顶层菜单项中添加子菜单“添加(&A)”(ID_STUINFO_ADD)。
用MFC ClassWizard为CEx_SDI2Doc类添加处理菜单项ID_STUINFO_ADD的COMMAND 消息,并添加代码:
void CEx_SDI2Doc::OnStuinfoAdd() { // TODO: Add your command handler code here //打开添加学生信息的对话框 CStuInfoDlg dlg; if (dlg.DoModal() != IDOK) return; // 添加学生的一条记录
}
CStudentInfo *pStudent = new CStudentInfo(dlg.m_name, dlg.m_id, dlg.m_male, dlg.m_birth, dlg.m_special); m_stuObArray.Add(pStudent);
SetModifiedFlag(); // 设置文档更改标志 UpdateAllViews(NULL); // 更新视图
3. 修改CEx_StudentDoc类代码
在Ex_SDI2Doc.h文件的class CEx_SDI2Doc前面,添加包含CStudentInfo类的头文件。 #include \
为CEx_ SDI2Doc类添加下列成员变量:
public:
CObArray m_stuObArray; // 对象集合类对象
为CEx_SDI2Doc类添加成员函数CStudentInfo* GetStudentInfoAt(int nIndex),用来获取m_stuObArray中指定索引号的CStudentInfo类指针。
为CEx_SDI2Doc类添加成员函数int GetAllRecNum(void),用于获取集合类中对象的个数其代码如下:
在Ex_SDI2Doc.h头文件手工添加如下代码:
// Attributes public:
CObArray m_stuObArray; // 对象集合类对象 CStudentInfo* GetStudentInfoAt(int nIndex); //获取指定学生 int GetAllRecNum(void); //获取学生个数 在Ex_SDI2Doc.cpp实现文件手工添加如下代码:
CStudentInfo* CEx_SDI2Doc::GetStudentInfoAt(int nIndex) { //返回指定学生 return (CStudentInfo *)m_stuObArray[nIndex]; }
int CEx_SDI2Doc::GetAllRecNum() { //返回学生个数 return m_stuObArray.GetSize(); }
(5) 在CEx_ SDI2Doc类析构函数~CEx_ SDI2Doc添加下列代码: CEx_ SDI2Doc::~CEx_ SDI2Doc() { int nIndex = GetAllRecNum(); while (nIndex--)
delete m_stuObArray.GetAt(nIndex); // 删除并释放对象的内存空间 m_stuObArray.RemoveAll(); }
(6) 在CEx_ SDI2Doc::Serialize函数中添加下列代码,实现保存功能。 void CEx_SDI2Doc::Serialize(CArchive& ar) { if (ar.IsStoring()) { m_stuObArray.Serialize(ar); } else { m_stuObArray.Serialize(ar); } }
修改CEx_ SDI2View类代码
将CEx_ SDI2View::OnDraw代码修改,用来将所有的学生基本信息记录显示在视图中: void CEx_ SDI2View::OnDraw(CDC* pDC) {
CEx_SDI2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int y = 0; for (int nIndex = 0; nIndex < pDoc->GetAllRecNum(); nIndex++) { pDoc->GetStudentInfoAt(nIndex)->Display(y, pDC); y += 16; }
}
5. 编译运行并测试
正在阅读:
Windos编程实验指导书解析06-15
曹刿论战习题及答案04-16
当课代表真不容易作文600字06-29
钢轨型号尺寸06-01
2019高考地理综合题答题思路集锦精品教育 doc03-17
残疾人就业调研与思考10-24
免疫组化分型诊断抗体选用表03-14
在校大学生入党志愿书范文201809-08
二年级下册比喻句专项训练03-31
- 高一物理牛顿运动定律全套学习学案
- 水处理一级反渗透加还原剂亚硫酸氢钠后为什么ORP会升高
- 毕业设计(论文)-正文董家口 - 图文
- 荣盛酒店经营管理公司录用通知及入职承诺书II
- 第二讲 大学英语四级快速阅读技巧
- 质量管理体系文件(2015年委托第三方医药物流配送企业专用版本)
- 214071收款办法
- 苏轼对《文选》选文的评价
- 《诊断学基础B》1-8作业
- 广东省东莞市高一数学下学期期末教学质量检查试题
- 海南电网公司VIS推广应用管理办法
- 红星照耀中国习题
- 苏教版小学语文六年级上册期末复习资料之生字词整理
- 局域网组建与应用—王向东
- 税务稽查内部管理文书样式
- 环保社会实践调查表
- 九年级思品第一单元复习
- 2016年全国注册咨询工程师继续教育公路路线设计规范试卷
- 毕业设计-青岛港董家口港区防波堤设计
- 撞背锻炼方法与益处
- 指导书
- 解析
- 编程
- 实验
- Windos
- 型钢柱吊装方案 - 图文
- 流体力学与流体机械习题参考答案
- 新东方新概念面授课笔记(1-30)
- Perror函数
- 《体外诊断试剂注册管理办法》(国家食品药品监督管理总局令第5
- 金钢石圆锯片基体项目可行性研究报告 - 图文
- 开启兴趣之门 放飞快乐之翅
- 广东省2015年中考化学总复习分类专题训练:科学探究
- 实验五十二 硅光电池特性的研究
- 江石如论文:小学语文教学对语言文字运用创新实践的策略
- 电喷系统的使用维护和故障诊断
- AfterEffect滤镜插件总目录
- 一年级数学上册7单元第1课时 认识钟表
- 《企业财务会计》第五章13级测验试卷及答案 25
- 美以关系
- 2018成都中考化学试卷+附答案(精确版)
- 制作集成IE8、.NET 3.5、WMP11和补丁的XP SP3安装盘
- 启颜录
- 物业管理的成本管理
- 英语论文-汉英数字文化比较及其翻译