编程实验指导书.docx
- 文档编号:12603672
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:66
- 大小:292.82KB
编程实验指导书.docx
《编程实验指导书.docx》由会员分享,可在线阅读,更多相关《编程实验指导书.docx(66页珍藏版)》请在冰点文库上搜索。
编程实验指导书
《Windows编程》实验指导书
VisualC++6.0开发环境
VC开发环境界面
Windows编程是指在Windows操作系统上开发各种应用程序,开发工具是多种多样的,使用的计算机语言也是不同的,有C++、Pascal、Basic等,本门课程主要讲授使用C++语言开发Windows应用程序,开发工具使用的是微软公司的VisualC++6.0软件(以下简称VC)。
图11
VC开发环境界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口以及状态栏组成,如图11所示。
标题栏上显示当前被操作的文档的文件名。
菜单栏包含了开发环境中几乎所有的命令,它为用户提供了文档操作、程序的编译、调试、窗口操作等一系列的功能。
菜单中的一些常用命令还被排列在相应的工具栏上,以便用户更好地操作。
项目工作区窗口位于开发环境的左边,它包含用户项目的一些信息,包括ClassView、FileView、ResourceView。
在项目工作区窗口中的任何标题或图标处单击鼠标右键,都会弹出相应的快捷菜单,该快捷菜单包含当前状态下的一些常用操作。
文档窗口一般位于开发环境的右边,它用于编辑各种程序的源代码,我们大部分时间都是和这个窗口打交道。
输出窗口一般出现在底部,它包括了编译、调试、查找文件等相关信处的输出。
这些输出信息以多页面标签的形式出现在输出窗口中,例如“编译”页面标签显示的是程序在编译和连接时的进度及错误信息。
状态栏一般位于最底部,它用于显示当前操作状态、注释、文本光标所在的行列号等信息。
开发的基本步骤
虽然编程是一项创造性的工作,但仍然需要遵循一些章法,掌握这些基本方法是学习编程必不可少的步骤,无论要编写一个多么庞大的程序,都是从这些最简单的工作开始的。
下面我们就介绍一下要编写一个Windows应用程序的基本步骤。
1、创建工程。
选择“File―New…”菜单,或是使用快捷键“CTRL+N”,将会弹出创建工程界面(图12)。
图12
在界面左侧,可以选择要创建的工程类型,VC中预置了十几种工程类型,我们只要从中选择一种我们需要的即可。
在学习C和C++语言课程时,大家可能使用的是Win32ConsoleApplication类型的工程,如果要开发可视化应用程序,可以选择MFCAppWizard或Win32Application等。
右侧的输入框用于指定工程名(Projectname)和工程文件存放的硬盘路径(Location),这些都由程序员自己决定。
选择好后点击“OK”进入下一步的工程配置,此处我们暂以Win32ConsoleApplication工程为例,取名为“MyFirstApp”,将为出现工程配置对话框(图13)。
直接点击“Finish”完成工程的创建。
图13
2、创建源文件。
此时的工程是空的,没有任何源文件,我们需要手工创建。
选择“File―New…”菜单,此时出现的界面(图14)和刚刚有所不同,其实仅仅是该对话框上方的选项卡变化所造成的,此时的选项卡是“File”,可以试着点击“Project”选项卡看看效果。
和新建工程一样,选择一种要创建的文件类型,这里我们选择C++SourceFile,并在右侧取一个文件名,然后点击OK即可。
图14
3、编写、调试程序代码。
这是程序员创造性工作的部分,在文档窗口中完成代码的编写工作,并不断地做调试工作,最后编译并运行代码。
实验环境
本课程所有的实验环境均为PC计算机、Windows2000操作系统以及VC++6.0软件。
实验一Win32程序框架设计实验
一实验目的
掌握Win32程序的基本原理和程序柜架编写方法;掌握鼠标消息结构,使用API编写一个简单的Windows窗口程序,能够捕获鼠标消息并打印出鼠标坐标。
二实验要求
理解Windows程序的运行原理,并了解如何创建一个可视化的应用程序,了解使用WindowsAPI完成各种功能,如打印文本等。
三实验内容
创建一个最简单的Windows应用程序,包含一个主窗口,让程序捕获用户的鼠标动作,并且不停地在主窗口坐标(100,200)处打印鼠标当前位置的坐标值。
四实验步骤
创建一个空的工程,参考代码如下:
#include
#include
LRESULTCALLBACKWinSunProc(
HWNDhwnd,//handletowindow
UINTuMsg,//messageidentifier
WPARAMwParam,//firstmessageparameter
LPARAMlParam//secondmessageparameter
);
intWINAPIWinMain(
HINSTANCEhInstance,//handletocurrentinstance
HINSTANCEhPrevInstance,//handletopreviousinstance
LPSTRlpCmdLine,//commandline
intnCmdShow//showstate
)
{
WNDCLASSwndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="sdut";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&wndcls);
HWNDhwnd;
hwnd=CreateWindow("sdut","山东理工大学计算机学院",WS_OVERLAPPEDWINDOW/*&~WS_MAXIMIZEBOX*/,
0,0,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSGmsg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return0;
}
LRESULTCALLBACKWinSunProc(
HWNDhwnd,//handletowindow
UINTuMsg,//messageidentifier
WPARAMwParam,//firstmessageparameter
LPARAMlParam//secondmessageparameter
)
{
switch(uMsg)
{
caseWM_CHAR:
charszChar[20];
sprintf(szChar,"charis%d",wParam);
MessageBox(hwnd,szChar,"weixin",0);
break;
caseWM_LBUTTONDOWN:
MessageBox(hwnd,"mouseclicked","weixin",0);
HDChdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
ReleaseDC(hwnd,hdc);
break;
caseWM_PAINT:
HDChDC;
PAINTSTRUCTps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
EndPaint(hwnd,&ps);
break;
caseWM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?
","weixin",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hwnd,uMsg,wParam,lParam);
}
return0;
}
实验二文本输出程序
一实验目的
掌握MFC的单文档程序设计原理;掌握CDC的文字处理程序的编写,如何产生自定义字体和自定义插入符,熟悉对CString类的使用。
二实验要求
掌握CDC的文字处理程序的编写,如何产生自定义字体和自定义插入符,熟悉对CString类的使用。
掌握定时器的使用和DrawText函数的巧妙运用。
掌握CDC的裁减功能。
三实验内容
创建一个文本处理应用程序,包含一个主窗口,能产生自定义字体和自定义插入符,模拟卡拉OK字幕变色的功能。
四实验步骤
1、生成一个单文档应用程序。
2、部分代码:
voidCTextView:
:
OnChar(UINTnChar,UINTnRepCnt,UINTnFlags)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CClientDCdc(this);
CFontfont;
font.CreatePointFont(300,"华文行楷",NULL);
CFont*pOldFont=dc.SelectObject(&font);
TEXTMETRICtm;
dc.GetTextMetrics(&tm);
if(0x0d==nChar)
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
elseif(0x08==nChar)
{
COLORREFclr=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_strLine+=nChar;
}
CSizesz=dc.GetTextExtent(m_strLine);
CPointpt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
dc.SelectObject(pOldFont);
CView:
:
OnChar(nChar,nRepCnt,nFlags);
}
voidCTextView:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
SetCaretPos(point);
m_strLine.Empty();
m_ptOrigin=point;
CView:
:
OnLButtonDown(nFlags,point);
}
voidCTextView:
:
OnTimer(UINTnIDEvent)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
m_nWidth+=5;
CClientDCdc(this);
TEXTMETRICtm;
dc.GetTextMetrics(&tm);
CRectrect;
rect.left=0;
rect.top=200;
rect.right=m_nWidth;
rect.bottom=rect.top+tm.tmHeight;
dc.SetTextColor(RGB(255,0,0));
CStringstr;
str.LoadString(IDS_WEIXIN);
dc.DrawText(str,rect,DT_LEFT);
rect.top=150;
rect.bottom=rect.top+tm.tmHeight;
dc.DrawText(str,rect,DT_RIGHT);
CSizesz=dc.GetTextExtent(str);
if(m_nWidth>sz.cx)
{
m_nWidth=0;
dc.SetTextColor(RGB(0,255,0));
dc.TextOut(0,200,str);
}
CView:
:
OnTimer(nIDEvent);
}
实验三菜单程序设计
一实验目的
掌握菜单的工作原理及编写应用,菜单命令消息在MFC框架程序的几个类中的传递顺序和处理过程。
二实验要求
掌握标记菜单、缺省菜单的实现原理、图形菜单的实现
掌握动态菜单的编写,如何让程序在运行时产生新的菜单项及如何手工为这些新产生的菜单命令。
更进一步掌握CString类的应用
三实验内容
创建一个菜单应用程序。
四实验步骤
1、生成一个单文档应用程序。
2、部分代码:
voidCMenu2View:
:
OnChar(UINTnChar,UINTnRepCnt,UINTnFlags)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CClientDCdc(this);
if(0x0d==nChar)
{
if(0==++m_nIndex)
{
m_menu.CreatePopupMenu();
GetParent()->GetMenu()->AppendMenu(MF_POPUP,
(UINT)m_menu.m_hMenu,"PhoneBook");
GetParent()->DrawMenuBar();
}
m_menu.AppendMenu(MF_STRING,IDM_PHONE1+m_nIndex,m_strLine.Left(m_strLine.Find('')));
m_strArray.Add(m_strLine);
m_strLine.Empty();
Invalidate();
}
else
{
m_strLine+=nChar;
dc.TextOut(0,0,m_strLine);
}
CView:
:
OnChar(nChar,nRepCnt,nFlags);
}
voidCMenu2View:
:
OnPhone1()
{
//TODO:
Addyourcommandhandlercodehere
CClientDCdc(this);
dc.TextOut(0,0,m_strArray.GetAt(0));
}
voidCMenu2View:
:
OnPhone2()
{
//TODO:
Addyourcommandhandlercodehere
CClientDCdc(this);
dc.TextOut(0,0,m_strArray.GetAt
(1));
}
voidCMenu2View:
:
OnPhone3()
{
//TODO:
Addyourcommandhandlercodehere
CClientDCdc(this);
dc.TextOut(0,0,m_strArray.GetAt
(2));
}
voidCMenu2View:
:
OnPhone4()
{
//TODO:
Addyourcommandhandlercodehere
CClientDCdc(this);
dc.TextOut(0,0,m_strArray.GetAt(3));
}
实验四对话框窗口及子窗口控件程序设
一、实验目的
1、熟悉对话框编程的一般步骤。
2、熟练应用模式对话框和无模式对话框。
3、掌握静态控件、编辑框、按钮类控件的属性及应用。
4、掌握列表框、组合框的使用。
5、掌握滚动类控件(滚动条、滑动条、旋转按钮)的使用。
二、实验内容与步骤
1、静态文本、编辑框和命令按钮的使用
2、单选按钮、复选按钮和分组框的使用
3、列表框的使用
4、组合框的使用
5、滚动条、滑动条和旋转按钮的使用
6、计算器的设计
设计一个简单的计算器,能够实现实数的四则运算、求倒数、求平方根等功能。
【实验步骤】
(1)创建工程
利用AppWizard向导,创建一个对话框应用程序,工程名:
“MyCalculator
”。
(2)设计对话框界面
在对话框中添加20个命令按钮和一个编辑框,界面如下:
各控件的属性设置见下表:
控件类型
控件的ID
控件的Caption
连接变量与类型
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
EditBox
IDC_BUTTON0
IDC_BUTTON1
……
IDC_BUTTON9
IDC_BUTTON_POINT
IDC_BUTTON_SIGN
IDC_BUTTON_ADD
IDC_BUTTON_SUB
IDC_BUTTON_MUL
IDC_BUTTON_DIV
IDC_BUTTON_CLEAR
IDC_BUTTON_SQRT
IDC_BUTTON_RECI
IDC_BUTTON_EQUAL
IDC_DISPLAY(只读、右对齐)
0
1
……
9
.
+/-
+
-
*
/
C
sqrt
1/x
=
Edit
m_displayCString
(3)为编辑框“IDC_DISPLAY”连接成员变量
为编辑框“IDC_DISPLAY”连接一个CString类型的成员变量m_display,用来显示操作数和运算结果。
(4)为CMyCalculatorDlg类添加数据成员
为了保存操作数和运算结果,需要在“CMyCalculatorDlg.h”中加入五个变量:
doublem_first;//存储一次运算的第一个操作数及一次运算的结果
doublem_second;//存储一次运算的第二个操作数
charm_operator;//存储运算符
doublem_coff;//存储小数点的系数权值
boolm_flag;//单目(true)、双目(false)运算标志
(5)在构造函数中初始化以上成员变量
CMyCalculatorDlg:
:
CMyCalculatorDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMyCalculatorDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMyCalculatorDlg)
m_display=_T("0.0");
m_first=0.0;
m_second=0.0;
m_operator='+';
m_coff=1.0;
m_flag=true;
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
(6)为所有的Button按钮的BN_CLICKED事件添加消息处理函数
对象的ID
消息
消息处理函数
IDC_BUTTON0
IDC_BUTTON1
……
IDC_BUTTON9
IDC_BUTTON_POINT
IDC_BUTTON_SIGN
IDC_BUTTON_ADD
IDC_BUTTON_SUB
IDC_BUTTON_MUL
IDC_BUTTON_DIV
IDC_BUTTON_CLEAR
IDC_BUTTON_SQRT
IDC_BUTTON_RECI
IDC_BUTTON_EQUAL
BN_CLICKED
BN_CLICKED
……
BN_CLICKED
BN_CLICKED
BN_CLICKED
BN_CLICKED
BN_CLICKED
BN_CLICKED
BN_CLICKED
BN_CLICKED
BN_CLICKED
BN_CLICKED
BN_CLICKED
OnButton0
OnButton1
OnButton9
OnButtonPoint
OnButtonSign
OnButtonAdd
OnButtonSub
OnButtonMul
OnButtonDiv
OnButtonClear
OnButtonSqrt
OnButtonRect
OnButtonEqual
(7)为CMyCalculatorDlg类添加一个成员函数UpdateDisplay,用来去除实数尾部的无效0,并更新编辑框。
代码如下:
voidCMyCalculatorDlg:
:
UpdateDisplay(doublelVal)
{
m_display.Format("%f",lVal);
inti=m_display.GetLength();
//格式化输出,将输出结果后的零截去
while(m_display.GetAt(i-1)=='0')
{
m_display.Delete(i-1,1);i--;
}
UpdateData(false);//更新编辑框变量m_display
}
(8)添加数字按钮的消息处理函数代码
数字按钮的消息处理函数代码类似,当点击
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 实验 指导书