VC程序设计实验指导.docx
- 文档编号:9279426
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:28
- 大小:30.63KB
VC程序设计实验指导.docx
《VC程序设计实验指导.docx》由会员分享,可在线阅读,更多相关《VC程序设计实验指导.docx(28页珍藏版)》请在冰豆网上搜索。
VC程序设计实验指导
VC++程序设计
实
验
指
导
书
李贵荣
计算机技术实验中心
前言
一、上机实验目的
上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理解VisualC++面向对象与可视化开发工具的基本功能和用法,掌握MFC的类框架结构,学会使用VisualC++编写Windows应用程序。
二、实验基本内容
为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了4个必做实验。
学生可以在课内机时先完成指导书中给出的程序,理解所学的知识,在此基础上再编写其他应用程序。
指导书中的4个实验如下。
1.基本Windows程序设计(2H,必做)。
2.简单图形界面程序设计(2H,必做)。
3.多文档程序设计(2H,必做)。
4.综合性程序设计(4H,必做)。
三、实验任务与时间安排
《VisualC++程序设计》是一门实践性很强的课程,除了在课内安排的实验外,鼓励同学在课外用相关技术进行编程练习。
《VisualC++程序设计》上机实验时间为10学时,与教学内容同时进行上机实验。
10个上机学时分为4个必做实验。
目录
实验一简单Windows程序设计3
实验二简单界面设计7
实验三多文档程序设计14
实验四综合设计实验18
实验一简单Windows程序设计
【实验目的】
1.学会创建VisualC++6.0Win32应用程序工程文件。
2.掌握Windows应用程序的基本结构。
3.理解Windows编程中的窗口、句柄、消息传递等概念及其作用。
4.理解Windows图形设备接口的概念及了解常用Windows绘图函数。
5.学会在VisualC++6.0中编译、调试、发布应用程序。
【实验性质】
验证性实验(学时数:
2H)
【实验要求】
1.在Windows下启动VisualC++6.0,创建工程文件。
2.编写一个简单的Windows应用程序,并在程序中创建句柄,学会使用句柄。
3.分析上面的程序,在程序中使用注释语句标识出Windows程序的基本构成部分,并在注释语句中注明各部分的作用。
4.在上面程序中添加消息处理函数,使用程序完成如下功能:
(1)定义一只红色的画笔,绘制一个等边五边形;
(2)用不同颜色的线条连接互不想念的两个点;
(3)用不同颜色的画笔填充用上述方法所形成的图形中的每一个区域。
【参考程序】
#include
#include
#include
#include
#definePi3.1415926
longWINAPIWndProc(HWNDhWnd,
UINTiMessage,
UINTwParam,
LONGlParam);//消息处理函数声明.
BOOLInitWindowsClass(HINSTANCEhInstance);//初始化窗口类声明
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);//初始化窗口声明.
HWNDhWndMain;
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)//主函数
{
MSGMessage;
if(!
InitWindowsClass(hInstance))//初始化窗口类.
returnFALSE;
if(!
InitWindows(hInstance,nCmdShow))//初始化窗口.
returnFALSE;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);//消息循环.
DispatchMessage(&Message);
}
returnMessage.wParam;
}
longWINAPIWndProc(HWNDhWnd,
UINTiMessage,
UINTwParam,
LONGlParam)//消息处理函数.
{
HDChDC;//定义设备环境句柄.
HBRUSHhBrush;//定义画刷句柄
HPENhPen;//定义画笔句柄
PAINTSTRUCTPtStr;//定义包含绘图信息的结构体变量
doubledfRadious0=200.0,dfRadious1;//定义外部和内部正五边形外接圆半径.
POINTlpOuterPoints[5],lpInnerPoints[5];//定义外,内正五边形点结构数组.
POINTlpTriangle[3];//定义三角形点结构数组.
dfRadious1=dfRadious0*sin(0.1*Pi)/sin(126.0/180*Pi);//根据外圆半径计算内园半径.
//计算内外正五边形的点坐标.
for(inti=0;i<5;i++)
{
lpOuterPoints[i].x=(long)(dfRadious0*cos(i*72.0/180*Pi))+200;
lpOuterPoints[i].y=(long)(dfRadious0*sin(i*72.0/180*Pi))+200;
lpInnerPoints[i].x=(long)(dfRadious1*cos(i*72.0/180*Pi+36.0/180*Pi))+200;
lpInnerPoints[i].y=(long)(dfRadious1*sin(i*72.0/180*Pi+36.0/180*Pi))+200;
}
switch(iMessage)
{
caseWM_PAINT:
//处理绘图消息.
hDC=BeginPaint(hWnd,&PtStr);//得到设备环境句柄
SetMapMode(hDC,MM_ANISOTROPIC);//设置映射模式.
SetWindowOrgEx(hDC,-100,-100,NULL);//设置坐标原点.
hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));//创新红色画笔.
SelectObject(hDC,hPen);//将画笔选入.
Polygon(hDC,lpOuterPoints,5);//画正五边形.
//填充正五边形的不同区域.
for(i=0;i<5;i++)
{
lpTriangle[0]=lpOuterPoints[i%5];//生成图形中的三角形区域的坐标.
lpTriangle[1]=lpInnerPoints[i%5];
lpTriangle[2]=lpOuterPoints[(i+1)%5];
//创新新画刷.
hBrush=CreateSolidBrush(RGB(i*10,i*20,i*30));
SelectObject(hDC,hBrush);//选入新画刷.
Polygon(hDC,lpTriangle,3);//画三角形区域.
lpTriangle[2]=lpInnerPoints[(i+4)%5];//生成图形中的三角形区域的坐标.
hBrush=CreateSolidBrush(RGB(i*40,i*30,i*20));//创新画刷.
SelectObject(hDC,hBrush);//选入画刷.
Polygon(hDC,lpTriangle,3);//画三角形区域.
}
hBrush=CreateSolidBrush(RGB(255,255,255));//创新白画刷.
SelectObject(hDC,hBrush);//选入画刷.
Polygon(hDC,lpInnerPoints,5);//画中心的五边形.
//用不同种颜色的画笔来绘制五角星.
MoveToEx(hDC,lpOuterPoints[0].x,lpOuterPoints[0].y,NULL);
for(i=1;i<=5;i++)
{
hPen=CreatePen(PS_SOLID,1,RGB(0,i*51,0));
SelectObject(hDC,hPen);
LineTo(hDC,lpOuterPoints[(i+2)%5].x,lpOuterPoints[(i+2)%5].y);
}
hPen=(HPEN)(GetStockObject(PS_NULL));
DeleteObject(hPen);//删除画笔.
DeleteObject(hBrush);//删除画刷.
EndPaint(hWnd,&PtStr);//结束绘图.
return0;
caseWM_DESTROY:
//处理关闭窗口信息.
PostQuitMessage(0);//向应用程序发送WM_QUIT消息.
return0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow)//初始化
{
HWNDhWnd;//定义窗口句柄.
hWnd=CreateWindow("Polygon",//窗口类名.
"五边形",//窗口实例标题.
WS_OVERLAPPEDWINDOW,//窗口风格.带边框,标题栏,系统菜单和最大和最小按钮.
CW_USEDEFAULT,//窗口左上角坐标.
0,//窗口左上角坐标.
CW_USEDEFAULT,//窗口宽度
0,//窗口高度
NULL,//无父窗口.
NULL,//无主菜单.
hInstance,//创建此窗口的应用程序的当前句柄.
NULL);//指向一个传递给窗口的参数值从指针.
//不使用该值.
if(!
hWnd)//如果窗口创建失败,返回false.
returnFALSE;
hWndMain=hWnd;//将窗口句柄传递给全局变量.
ShowWindow(hWnd,nCmdShow);//显示窗口.
UpdateWindow(hWnd);//更新并绘制用户区.
returnTRUE;
}
BOOLInitWindowsClass(HINSTANCEhInstance)//初始化窗口类.
{
WNDCLASSWndClass;//定义窗口类.
WndClass.cbClsExtra=0;//窗口类无扩展.
WndClass.cbWndExtra=0;//窗口实例无扩展.
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));//窗口背景为白色.
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标.
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为缺省图标.
WndClass.hInstance=hInstance;//当前实例句柄.
WndClass.lpfnWndProc=WndProc;//窗口处理函数.
WndClass.lpszClassName="Polygon";//窗口类名.
WndClass.lpszMenuName=NULL;//无菜单
WndClass.style=0;//窗口类型为缺省类型.
returnRegisterClass(&WndClass);//返回注册窗口的值.
}
实验二简单界面设计
【实验目的】
使用MFC应用程序向导,生成Windows基本对话框。
通过对Windows基本对话框的学习和使用,了解MFC的类库结构,掌握CDialog的基本组成,了解对话框程序的工作过程,学习使用常用的Windows控件,学会编写消息处理函数。
【实验性质】
验证性实验(学时数:
2H)
【实验要求】
使用MFC应用程序向导编写一个基本对话框程序。
在程序综合运用静态文本框、编辑框、按钮控件,在程序练习使用文件对话框、颜色选择对话框、字体对话框、打印对话框等常用类。
【实验内容】
编写一个简单的计算器程序,要求有两个操作数,实现加、减、乘、除。
参考界面如下图:
//对话框定义(部分)
//CMy11_4Dlgdialog
classCMy11_4Dlg:
publicCDialog
{
//Construction
public:
CMy11_4Dlg(CWnd*pParent=NULL);//standardconstructor
//DialogData
//{{AFX_DATA(CMy11_4Dlg)
enum{IDD=IDD_MY11_4_DIALOG};
CEditm_Item1_Edit;
CEditm_Item2_Edit;
CStringm_sResult_Edit;
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CMy11_4Dlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CMy11_4Dlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnDevideButton();
afx_msgvoidOnDifferenceButton();
afx_msgvoidOnExitButton();
afx_msgvoidOnMultipleButton();
afx_msgvoidOnAddButton();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//对话框实现(部分)
#include"stdafx.h"
#include"11_4.h"
#include"11_4Dlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMy11_4Dlgdialog
CMy11_4Dlg:
:
CMy11_4Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMy11_4Dlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMy11_4Dlg)
m_sResult_Edit=_T("");
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCMy11_4Dlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMy11_4Dlg)
DDX_Control(pDX,IDC_ITEM1_EDIT,m_Item1_Edit);
DDX_Control(pDX,IDC_ITEM2_EDIT,m_Item2_Edit);
DDX_Text(pDX,IDC_RESULT_EDIT,m_sResult_Edit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMy11_4Dlg,CDialog)
//{{AFX_MSG_MAP(CMy11_4Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_DEVIDE_BUTTON,OnDevideButton)
ON_BN_CLICKED(IDC_DIFFERENCE_BUTTON,OnDifferenceButton)
ON_BN_CLICKED(IDC_EXIT_BUTTON,OnExitButton)
ON_BN_CLICKED(IDC_MULTIPLE_BUTTON,OnMultipleButton)
ON_BN_CLICKED(IDC_ADD_BUTTON,OnAddButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMy11_4Dlgmessagehandlers
BOOLCMy11_4Dlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 程序设计 实验 指导
![提示](https://static.bdocx.com/images/bang_tan.gif)