程序设计强化实验报告123.docx

上传人:b****6 文档编号:8797506 上传时间:2023-02-01 格式:DOCX 页数:82 大小:504.73KB
下载 相关 举报
程序设计强化实验报告123.docx_第1页
第1页 / 共82页
程序设计强化实验报告123.docx_第2页
第2页 / 共82页
程序设计强化实验报告123.docx_第3页
第3页 / 共82页
程序设计强化实验报告123.docx_第4页
第4页 / 共82页
程序设计强化实验报告123.docx_第5页
第5页 / 共82页
点击查看更多>>
下载资源
资源描述

程序设计强化实验报告123.docx

《程序设计强化实验报告123.docx》由会员分享,可在线阅读,更多相关《程序设计强化实验报告123.docx(82页珍藏版)》请在冰豆网上搜索。

程序设计强化实验报告123.docx

程序设计强化实验报告123

西南交通大学

软件学院

暑期实习报告

实习名称:

程序设计技能强化

指导教师:

李茜、钟灿、邱建川

年级:

2009级计软三班

实习时间:

7.14~7.27

学号:

20095574

姓名:

刘长生

 

实验一MFC编程基础-生成程序框架—————1

 

实验二鼠标、键盘、窗口消息————————2

 

实验三菜单、工具栏、状态栏————————14

 

实验四对话框与控件————————————23

 

实验五文档视图结构————————————28

 

大作业———————————————————33

实习总结-----------------------------------------68

实验一WIN32控制台应用程序

班级:

软件三班学号:

20095574姓名:

刘长生

实验日期:

实验成绩:

一、实验目的

1.熟悉WIN32控制台应用程序,掌握其创建和使用;

2.掌握向工程添加文件的方法;

二、实验环境

MicrosoftVisualStudio2008

三、实验原理

用C++语言编写。

三、实验步骤

1.编写一个WIN32控制台应用程

2.在屏幕上输出“HelloVisualC++2008!

四、实验结果

五、实验结果分析

用W32控制台应用程序,添加相应文件,完成了在屏幕输出“HelloVisualC++2008!

”.

附件1:

程序源代码

//lab1.cpp:

定义控制台应用程序的入口点。

//

#include"stdafx.h"

#include

usingnamespacestd;

int_tmain(intargc,_TCHAR*argv[])

{

cout<<"HelloVisualC++2008!

"<

return0;

}

实验二

(1)鼠标实验

班级:

09软件三班学号:

20095574姓名:

刘长生

实验日期:

实验成绩:

一、实验目的

1、了解MFC的基本框架;

2、掌握MFC生成程序框架的基本步骤;

3、熟悉SDI、MDI和基于对话框应用程序的框架

4..熟悉单文档,多文档MFC应用程序的创建;

5、熟悉SDI、MDI和基于对话框应用程序的框架中关键函数;

6..掌握消息的添加;

7、了解各个关键函数调用顺序和作用。

二、实验原理

利用消息映射函数添加代码。

三、实验步骤

1.创建单文档MFC应用程序;

2.为鼠标左键单击消息WM_LBUTTONDOWN和鼠标右键双击消息WM_RBUTTONDBLCLK添加相应的消息映射函数。

当单击时,弹出“左键被按下!

”的对话框;当双击鼠标右键时,弹出“右键被双击!

”的对话框;

3.设置鼠标形状,鼠标在移动过程中变为手形

4.添加WM_MOUSEMOVE消息映射函数,限定鼠标的移动范围,鼠标只能在窗口区域移动,不能移出该区域

四、实验结果

五、实验结果分析

实验结果符合实验要求,1、当单击时,弹出“左键被按下!

”的对话框;当双击鼠标右键时,弹出“右键被双击!

”的对话框;2、鼠标在移动过程中变为手形;3、鼠标只能在窗口区域内移动,不能移出该区域。

附件1:

程序源代码

//CMy2_1View消息处理程序

voidCMy2_1View:

:

OnLButtonDown(UINTnFlags,CPointpoint)

{

//TODO:

在此添加消息处理程序代码和/或调用默认值

CDC*pDc=GetDC();

CDialogdialog((LPCTSTR)"lab2_1");//=(CDialog*)GetDC();

CStringstr=(CString)"左键被按下!

";

dialog.DoModal();

dialog.MessageBox(str);

CView:

:

OnLButtonDown(nFlags,point);

}

voidCMy2_1View:

:

OnMouseMove(UINTnFlags,CPointpoint)

{

//TODO:

在此添加消息处理程序代码和/或调用默认值

CDC*pDC=GetDC();

HCURSORcursor;

RECTrcClip;

if((nFlags&MK_LBUTTON)!

=MK_LBUTTON)

{

GetWindowRect(&rcClip);

ClipCursor(&rcClip);

cursor=AfxGetApp()->LoadStandardCursor(IDC_HAND);

SetCursor(cursor);

}

CView:

:

OnMouseMove(nFlags,point);

}

voidCMy2_1View:

:

OnRButtonDblClk(UINTnFlags,CPointpoint)

{

//TODO:

在此添加消息处理程序代码和/或调用默认值

CDC*pDc=GetDC();

CDialogdialog((LPCTSTR)"lab2_1");//=(CDialog*)GetDC();

CStringstr=(CString)"右键被双击!

";

dialog.DoModal();

dialog.MessageBox(str);

 

实验二

(2)键盘和窗口控制实验

班级:

09软件三班学号:

20095574姓名:

刘长生

实验日期:

实验成绩:

一、实验目的

1、理解基于事件,消息处理的机制

2、掌握各种消息的处理(命令消息、控件消息和自定义消息)

二、实验原理

利用消息映射函数添加代码。

三、实验步骤

1,.新建建立单文档MFC项目,视图类的基类设为CScrollView

2.用鼠标控制窗口大小,为WM_SIZE(窗口改变大小)编写消息映射函数

3.当窗口大小发生改变时,改变窗口的背景颜色,为WM_DRAW编写消息映射函数,

4.用键盘的按键实现滚动条的控制,为WM_KEYDOWN消息编写消息映射函数

5.计算视图的合计大小,为WM_InitialUpdate消息编写消息映射函数

四、实验结果

四、实验结果分析

实验结果符合实验要求,1、当窗口大小发生改变时,改变窗口的背景颜色2、当按下上、下、左、右键时,滚动条会随之上、下、左、右移动。

附件1:

程序源代码

//lab2_2View.cpp:

Clab2_2View类的实现

//

#include"stdafx.h"

#include"lab2_2.h"

#include"lab2_2Doc.h"

#include"lab2_2View.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

 

//Clab2_2View

IMPLEMENT_DYNCREATE(Clab2_2View,CScrollView)

BEGIN_MESSAGE_MAP(Clab2_2View,CScrollView)

//标准打印命令

ON_COMMAND(ID_FILE_PRINT,&CScrollView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT,&CScrollView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW,&CScrollView:

:

OnFilePrintPreview)

ON_WM_SIZE()

ON_WM_KEYDOWN()

END_MESSAGE_MAP()

//Clab2_2View构造/析构

Clab2_2View:

:

Clab2_2View()

{

//TODO:

在此处添加构造代码

}

Clab2_2View:

:

~Clab2_2View()

{

}

BOOLClab2_2View:

:

PreCreateWindow(CREATESTRUCT&cs)

{

//TODO:

在此处通过修改

//CREATESTRUCTcs来修改窗口类或样式

returnCScrollView:

:

PreCreateWindow(cs);

}

//Clab2_2View绘制

voidClab2_2View:

:

OnDraw(CDC*pDC)

{

Clab2_2Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

srand(time((unsignedint)NULL));

intcolorNum=rand()%256,cx=rand()%256,cy=rand()%256;

CRectclientRect;

GetClientRect(clientRect);

CBrushbrush;

brush.CreateSolidBrush(RGB(colorNum,cx,cy));

//colorNum++;cx++;cy++;

pDC->DPtoLP(clientRect);

pDC->FillRect(clientRect,&brush);

if(!

pDoc)

return;

 

//TODO:

在此处为本机数据添加绘制代码

}

voidClab2_2View:

:

OnInitialUpdate()

{

CScrollView:

:

OnInitialUpdate();

CSizesizeTotal;

CRectclientRect;

GetClientRect(clientRect);

CSizesizePage=clientRect.Width();

CSizesizeLine=clientRect.Width();

//TODO:

计算此视图的合计大小

sizeTotal.cx=sizeTotal.cy=2500;

SetScrollSizes(MM_TEXT,sizeTotal);

}

 

//Clab2_2View打印

BOOLClab2_2View:

:

OnPreparePrinting(CPrintInfo*pInfo)

{

//默认准备

returnDoPreparePrinting(pInfo);

}

voidClab2_2View:

:

OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

添加额外的打印前进行的初始化过程

}

voidClab2_2View:

:

OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

添加打印后进行的清理过程

}

 

//Clab2_2View诊断

#ifdef_DEBUG

voidClab2_2View:

:

AssertValid()const

{

CScrollView:

:

AssertValid();

}

voidClab2_2View:

:

Dump(CDumpContext&dc)const

{

CScrollView:

:

Dump(dc);

}

Clab2_2Doc*Clab2_2View:

:

GetDocument()const//非调试版本是内联的

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(Clab2_2Doc)));

return(Clab2_2Doc*)m_pDocument;

}

#endif//_DEBUG

 

//Clab2_2View消息处理程序

voidClab2_2View:

:

OnSize(UINTnType,intcx,intcy)

{

CScrollView:

:

OnSize(nType,cx,cy);

Invalidate(TRUE);

//TODO:

在此处添加消息处理程序代码

}

voidClab2_2View:

:

OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)

{

//TODO:

在此添加消息处理程序代码和/或调用默认值

//TODO:

在此添加消息处理程序代码和/或调用默认值

switch(nChar)

{

case38:

//CScrollView*pDc=(CScrollView*)GetDocument();/制转换用时要小心,很可能出错。

//CPointpoint=pDc->GetDeviceScrollPosition();

//SendMessage(WM_MOUSEWHEEL);

//pDc->ScrollToPosition(CPoint(++point.x,++point.y));

//TStringGrida;

//number=37;

SendMessage(WM_VSCROLL);

break;

case40:

//number=40;

SendMessage(WM_VSCROLL,1);

break;

case37:

//number=37;

SendMessage(WM_HSCROLL);

break;

case39:

//number=39;

SendMessage(WM_HSCROLL,1);

break;

}

 

CScrollView:

:

OnKeyDown(nChar,nRepCnt,nFlags);

}

 

实验三菜单,状态栏,工具栏的设计

班级:

09软件三班学号:

095574姓名:

刘长生

实验日期:

实验成绩:

一、实验目的

1.了解文档与视图结构程序的工作原理

2.掌握应用程序中的菜单界面设计方法

3.掌握工具栏和状态栏等程序界面的设计方法

4.掌握文档的序列化工作原理

5.掌握使用不同的视图类编程

二、实验原理

1.Windows应用程序包括客户区、非客户区。

非客户区包括窗口的边框、标题栏、单栏、工具栏、状态栏和滚动条。

菜单分为两类,一类是依附于框架窗口的一般菜单,包括主菜单和子菜单,另一类是弹出式菜单,也叫快捷菜单或上下文菜单

2.菜单中的每一个菜单项都由菜单项名和命令ID号两个基本要素组成。

3.Windows应用程序是通过消息传递机制运作的,菜单项对命令的激发、调用是通过发送WM_COMMAND消息实现的

4.在程序中可以通过为WM_CONTEXTMENU消息添加消息映射函数来实现弹出式菜单,WM_CONTEXTMENU消息是在收到WM_RBUTTONUP消息后,由windows产生的。

但如果在WM_RBUTTONUP的消息映射函数中没有调用基类的成员函数,则应用程序不会收到WM_CONTEXTMENU消息

5.工具栏是菜单的一种快捷方式。

把最常用的菜单定义为工具栏。

6.状态栏是典型的位于应用程序主窗口底部的窗口,经常在状态栏显示文本提示信息。

当用户浏览菜单项和工具栏按钮时,MFC自动地在状态栏窗口中显示一些提示信息。

三、实验步骤

1.为程序添加一个“文本”主菜单单项“显示”和“删除”。

点击显示时显示出“欢迎”字样,点击删除时字样消失。

(1)在文档派生类Cwork3Doc添加一个成员变量m_change:

(2)修改视图派生类的OnDraw函数,根据m_change的值显示或删除文本;(3)为菜单项添加命令处理函.

2.为程序work3的“文本”菜单添加弹出式菜单。

在类视图中选择类Cwork3View,在“属性”窗口中单击“消息”按钮,选择“WM_CONTEXTMENU”选项,单击右侧下拉菜单中的“<添加>OnContextMenu”选项,即可在视图类Cwork3View中添加消息WM_CONTEXTMENU的消息映射函数.

3.为程序work3的“文本”菜单项添加工具栏按钮。

(1)在资源视图中展开“work3.rc”文件夹,再展开“Toolbar”文件夹,双击其下“IDR_MAINFRAME”选项,打开工具栏编辑器,屏幕上同时显示工具栏设计窗口,选择资源视图里的“work3”菜单项右击,在弹出的快捷菜单中执行“添加”——“资源”命令,会弹出“添加资源”对话框,在“资源类型”列表框中选择“Toolbar”选项,并单击“新建”按钮,系统就会默认添加一个名为“IDR_TOOLBAR1”的工具栏,屏幕上同时显示工具栏设计窗口,用户可自己设计工具栏。

(2)添加工具栏按钮.(3)设置工具栏按钮属性.

4修改的程序work3,在状态栏上显示鼠标的位置,以及当前的状态(是显示文本还是删除文本)。

(1)添加串表;

(2)添加指示器面板;(3)添加消息映射函数OnMouseMove;(4)修改OnDraw函数,添加显示当前状态的代码。

.

.

5.设置状态栏显示时间。

(1)在StringTable中添加NewString,在此定义为ID_INDICATOR_CLOCK,将其Caption设为00:

00:

00。

(2)在MainFrm.cpp中indicators声明处添加ID_INDICATOR_CLOCK,;(3)安装定时器(4)编写时间处理函数(5)销毁定时器。

6.调试,运行。

四、实验结果

五、实验结果分析

实验结果符合实验要求。

主菜单的“文本”和它的两个下拉子菜单项“显示”和“删除”。

点击显示时显示出“欢迎”字样,点击删除时字样消失。

并添加对应的按钮和弹出菜单。

状态栏显示当前状态、鼠标位置、时间

附件1:

程序源代码

一:

//work3View.cpp:

Cwork3View类的实现

//

#include"stdafx.h"

#include"work3.h"

#include"work3Doc.h"

#include"work3View.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

//Cwork3View

IMPLEMENT_DYNCREATE(Cwork3View,CView)

BEGIN_MESSAGE_MAP(Cwork3View,CView)

//标准打印命令

ON_COMMAND(ID_FILE_PRINT,&CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT,&CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW,&CView:

:

OnFilePrintPreview)

ON_WM_CONTEXTMENU()

ON_WM_MOUSEMOVE()

END_MESSAGE_MAP()

//Cwork3View构造/析构

Cwork3View:

:

Cwork3View()

{

//TODO:

在此处添加构造代码

}

Cwork3View:

:

~Cwork3View()

{}

BOOLCwork3View:

:

PreCreateWindow(CREATESTRUCT&cs)

{

//TODO:

在此处通过修改

//CREATESTRUCTcs来修改窗口类或样式

returnCView:

:

PreCreateWindow(cs);

//Cwork3View绘制

voidCwork3View:

:

OnDraw(CDC*pDC)

{

Cwork3Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(!

pDoc)

return;

//TODO:

在此处为本机数据添加绘制代码

switch(pDoc->m_change)

{

case1:

pDC->TextOut(10,10,_T("欢迎!

"));

break;

case2:

pDC->TextOut(10,10,_T(""));

break;

}

CStringstate;

//获取状态栏指针

CStatusBar*pStatus;

pStatus=(CStatusBar*)AfxGetApp()->m_pMainWnd->GetDescendantWindow(ID_VIEW_STATUS_BAR);

if(pStatus)

{

switch(pDoc->m_change)

{

case1:

state="显示";

pStatus->SetPaneText(2,state);//显示当前状态

break;

case2:

state="删除";

pStatus->SetPaneText(2,state);//显示当前状态

break;

}

}

}

//Cwork3View打印

BOOLCwork3View:

:

OnPreparePrinting(CPrintInfo*pInfo)

{

//默认准备

returnDoPreparePrinting(pInfo);

}

voidCwork3View:

:

OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

添加额外的打印前进行的初始化过程

}

voidCwork3View:

:

OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

添加打印后进行的清理过程

}

//Cwork3View诊断

#ifdef_DEBUG

voidCwork3View:

:

AssertValid()const

{

CView:

:

AssertValid();

}

voidCwork3View:

:

Dump(CDumpContext&dc)const

{

CView:

:

Dump(dc);

}

Cwork3Doc*Cwork3View:

:

GetDocument()const//非调试版本是内联的

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(Cwork3Doc)));

return(Cwork3Doc*)m_pDocument;

}

#endif//_DEBUG

//Cwork3View消息处理程序

intCwork3View:

:

OnDraw(void)

{

return0;

}

voidCwork3View:

:

OnContextMenu(CWnd*pWnd,CPointpoint)

{

//TODO:

在此处添加消

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1