Visual C++Net程序设计开放选修实验实验报告.docx

上传人:b****0 文档编号:12778320 上传时间:2023-04-22 格式:DOCX 页数:44 大小:38.16KB
下载 相关 举报
Visual C++Net程序设计开放选修实验实验报告.docx_第1页
第1页 / 共44页
Visual C++Net程序设计开放选修实验实验报告.docx_第2页
第2页 / 共44页
Visual C++Net程序设计开放选修实验实验报告.docx_第3页
第3页 / 共44页
Visual C++Net程序设计开放选修实验实验报告.docx_第4页
第4页 / 共44页
Visual C++Net程序设计开放选修实验实验报告.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

Visual C++Net程序设计开放选修实验实验报告.docx

《Visual C++Net程序设计开放选修实验实验报告.docx》由会员分享,可在线阅读,更多相关《Visual C++Net程序设计开放选修实验实验报告.docx(44页珍藏版)》请在冰豆网上搜索。

Visual C++Net程序设计开放选修实验实验报告.docx

VisualC++Net程序设计开放选修实验实验报告

实验一——对话框简单练习

实验学时:

2

实验类型:

设计

实验要求:

必修

一实验目的

通过本次上机实习,能够掌握简单的基于对话框的MFC应用程序的编写,了解Windows编程常用的数据类型,能够使用常用的Win32API函数和.Net控件,为后面实验打下基础。

二实验内容

设计一个四则运算和常用数学非初等运算的计算器。

用到的内容有:

1.多个Win32API函数,有GetDlgItem,SetWindowText,GetWindowText等。

GetDlgItem

  该函数检索指定的对话框中的控件句柄。

函数原型HWNDGetDlgItem(intnlDDlgltem);nlDDlgltem:

指定将被检索的控件标识符。

  返回值:

如果函数调用成功则返回值为给定控件的窗口句柄。

如果函数调用失败,则返回值为NULL,表示为一个无效的对话框句柄或一个不存在的控件。

若想获得更多错误信息,请调用GetLastError函数。

  备注:

可以通过使用任何父子窗口对来使用GetDlgltem函数,而不仅只是对话框。

只要hDlg参数指定一个父窗口,且子窗口有一个独立的标识符(象CreateWindow中hMenu参数指定的或创建子窗口的CreateWindowEx指定的那样),GetDlgltem就会返回一个有效的句柄到子窗口。

GetWindowText

  该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。

如果指定的窗口是一个控件,则拷贝控件的文本。

但是,GetWindowText不能接收其他应用程序中控件的文本。

  函数原型:

intGetWindowText(HWNDhWnd,LPTSTRlpString,IntnMaxCount);

参数:

  hWnd:

带文本的窗口或控件的句柄。

  IpString:

指向接收文本的缓冲区的指针。

  nMaxCount:

指定要保存在缓冲区内的字符的最大个数,其中包含NULL字符。

如果文本超过界限,它就被截断。

  如果函数成功,返回值是拷贝的字符串的字符个数,不包括中断的空字符;如果窗口无标题栏或文本,或标题栏为空,或窗口或控制的句柄无效,则返回值为零。

若想获得更多错误信息,请调用GetLastError函数。

  函数不能返回在其他应用程序中的编辑控件的文本。

SetWindowText

  函数功能:

该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。

如果指定窗口是一个控件,则改变控件的文本内容。

然而,SetWindowText函数不改变其他应用程序中的控件的文本内容。

  函数原型:

BOOLSetWindowText(HWNDhwnd,LPCTSTRlpString);

  参数:

  hWnd:

要改变文本内容的窗口或控件的句柄。

  lpString:

指向一个空结束的字符串的指针,该字符串将作为窗口或控件的新文本。

  返回值:

如果函数成功,返回值为非零;如果函数失败,返回值为零。

2.多个MFC类,有CString类,CMenu类。

CString

CString类的成员函数

  1)CString类的构造函数

  CString类有很多构造函数,这里只介绍几个比较常用的:

  CString(constCString&stringSrc);

  将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。

例如:

  CStringstr1(_T(jizhuomi));//将常量字符串拷贝到str1

  CStringstr2(str1);//将str1的内容拷贝到str2

  CString(LPCTSTRlpch,intnLength);

  将字符串lpch中的前nLength个字符拷贝到该CString对象。

例如:

  CStringstr(_T("wwwjizhuomi"),3);//构造的字符串对象内容为"www"

  CString(TCHARch,intnLength=1);

  使用此函数构造的CString对象中将含有nLength个重复的ch字符。

例如:

  CStringstr(_T('w'),3);//str为"www"

  2)CString类的大小写转换及顺序转换函数

  CString&MakeLower();将字符串中的所有大写字符转换为小写字符。

  CString&MakeUpper();将字符串中的所有小写字符转换为大写字符。

  CString&MakeReverse();将字符串中所有字符的顺序颠倒。

  例如:

  CStringstr(_T("JiZhuoMi"));

  str.MakeLower();//str为"jizhuomi"

  str.MakeUpper();//str为"JIZHUOMI"

  str.MakeReverse();//str为"IMOUHZIJ"

  3)CString对象的连接

  多个CString对象的连接可以通过重载运算符+、+=实现。

例如:

  CStringstr(_T("jizhuomi"));//str内容为"jizhuomi"

  str=_T("www")+str+_T("-");//str为"wwwjizhuomi-"

  str+=_T("com");//str为wwwjizhuomi-com

  4)CString对象的比较

  CString对象的比较可以通过==、!

=、<;、>;、<=、>=等重载运算符实现,也可以使用Compare和CompareNoCase成员函数实现。

  intCompare(PCXSTRpsz)const;

  将该CString对象与psz字符串比较,如果相等则返回0,如果小于psz则返回值小于0,如果大于psz则返回值大于0。

  intCompareNoCase(PCXSTRpsz)constthrow();

  此函数与Compare功能类似,只是不区分大小写。

CMenu

CMenu类的成员函数:

  1.CreateMenu()和CreatePopupMenu(),这两个函数用来创建一个菜单实例,CreateMenu()创建的是普通的菜单实例,如果想创建弹出式菜单,就要用CreatePopupMenu()函数。

  2.AppendMenu()向菜单中添加一个子项,这个函数有两个主要的参数。

第一个UINTnFlags,这个参数表明了该子项的属性特征,可以这样说,这个参数规定了菜单的样式和功能。

后面会详细讲这个参数所能使用的值。

第二个参数UINT_PTRnIDNewItem,根据nFlags使用不同的设置,该参数将标明菜单的资源ID或在这个菜单中的索引号。

第三个参数可以省略,如果不省略,可以传入一个字符串,这个字符串将显示在菜单中(因为我准备用突破表示菜单项,所以我的工程中省略了这个参数)。

  3.DrawItem(),这是一个虚函数,如果菜单设置成可以自绘类型,则这个函数将在生成菜单、弹出菜单、选中菜单、点击菜单等时由系统框架调用。

因此,这个函数是一个很有用的函数,它可以帮你绘制出各种样式的菜单。

  4.MeasureItem()也是一个虚函数,当菜单被创建的时候由系统框架调用。

这个函数用来设置菜单的大小。

二、nFlags说明:

  只有当nFlags设置成MF_OWNERDRAW的时候,系统框架才会重绘菜单。

  MF_CHECKED:

命令旁显示默认复选标志

  MF_UNCHECKED:

清除命令旁的复选标志

  MF_DISABLED:

禁止此菜单命令,但是不变灰显示

  MF_ENABLED:

允许此菜单命令,恢复到正常状态

  MF_GRAYED:

禁止此菜单命令,变灰显示

  MF_MENUBARBREAK:

对于静态菜单,放到新行;对于弹出菜单,放到新栏中,栏间有分隔线

  MF_MENUBREAK:

对于静态菜单,放到新行;对于弹出菜单,放到新栏,栏间无分隔线

  MF_OWNERDRAW:

指定该命令是自画式菜单命令

  MF_POPUP:

指定该菜单命令有一个关联的弹出式菜单

  MF_SEPARATOR:

画一条水平分隔线,只用于弹出式菜单

  MF_STRING:

指定此菜单命令是一个字符串

  CMenu类从CObject类派生而来。

为什么要使用CMenu类呢?

AppWzard不是把菜单做好了吗?

在资源编辑器上修改菜单不是很方便吗?

  感觉学vc++稍微深入一点好,至少要能搞清楚AppWizard在背后都干了些什么东西。

  事实上mfc就是用CMenu类来生成菜单的。

让我们就从CMenu开始吧。

  CMenu生成的菜单有两种:

Popup类型和非Popup类型。

这两种方法里又可以分

  成使用资源编辑器生成的菜单资源和不使用这个资源。

对于非Popup类型的菜单,

  必须在创建出来后把它张贴到某个窗口上,它才会显示出来,从而才有用处。

Po

  pup的菜单却不能张贴到窗口上。

  说明之前,先定义几个常量:

  #defineIDM_MENU00

  #defineIDM_MENU11

  #defineIDM_MENU22

  #defineIDM_MENU33

  #defineIDM_ITEM010

  #defineIDM_ITEM111

  #defineIDM_ITEM212

  #defineIDM_ITEM313

  #defineIDM_ITEM414

  #defineIDM_ITEM515

  #defineIDM_ITEM616

3.字符串到数值的转换函数,有atoi,atof。

atoi

  C语言库函数名:

atoi

  功能:

把字符串转换成整型数。

  名字来源:

arraytointeger的缩写。

  原型:

intatoi(constchar*nptr);

  函数说明:

参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符\0)字符时停止转换,返回整型数。

  头文件:

#include

4.若干控件,有Button,EditControl,Menu资源。

三实验组织运行要求

实验前,由任课教师落实实验任务,每个学生事先编写好算法设计源程序代码。

集中上机、调试并通过计算机图形可视化演示操作实例来测试。

四实验条件

为每个学生提供一台具有WINDOWS98/XP/NT/2000操作系统的计算机;同时提供VisualC++.Net2005编程软件。

五实验步骤

1.建立基于对话框的MFC应用程序。

2.添加需要的控件和资源。

3.编写程序并调试。

4.实验完毕后提交实验报告。

六源程序

voidCCalculatorDlg:

:

OnBnClickedButton1()

{

if(m_Seq==false)

{

if(m_Point==false)

a1=a1*10+1;

else

{

m_Time/=10;

a1+=1*m_Time;

}

CStringmStr;

mStr.Format("%f",a1);

GetDlgItem(IDC_EDIT1)->SetWindowTextA(mStr);

}

else

{

if(m_Point==false)

a2=a2*10+1;

else

{

m_Time/=10;

a2+=1*m_Time;

}

CStringmStr;

mStr.Format("%f",a2);

GetDlgItem(IDC_EDIT1)->SetWindowTextA(mStr);

}

}

voidCCalculatorDlg:

:

OnBnClickedButton12()

{

m_Seq=true;

m_Cal=0;

m_Point=false;

m_Time=1;

}

voidCCalculatorDlg:

:

OnBnClickedButton11()

{

m_Point=true;

}

voidCCalculatorDlg:

:

OnBnClickedButton16()

{

CStringmStr;

a1=a1+a2;

mStr.Format("%f",a1);

GetDlgItem(IDC_EDIT1)->SetWindowTextA(mStr);

}

 

实验二——图形绘制

实验学时:

4

实验类型:

设计

实验要求:

必修

一实验目的

通过该课程实习,学会使用CDC进行图形的绘制和图像显示。

二实验内容

本实验使用CDC类自动绘制自选中心和半径的五角星。

用到CDC类。

  CDC类定义的是设备上下文对象的类。

CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。

通过CDC对象的成员函数进行所有的绘图。

类对设备上下文操作提供了成员函数,处理绘图工具。

安全型图形设备接口对象收集,以及处理颜色和调色板。

它还为获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多边形等形状提供了成员函数。

另外还为绘制文本、处理字体,使用打印机跳转,滚动和播放元文件提供成员函数。

使用CDC对象时要构造它,然后调用与它平等的、使用设备上下文的Windows函数的成员函数。

CDC类的数据成员:

  HDCm_hDC:

CDC对象使用的输出设备上下文

  HDCm_hAttribDC:

CDC对象使用的属性设备上下文

  二者在CDC对象创建时指向相同的设备上下文。

需要包含头文件:

#include

使用CDC类型指针pDC前,首先需要使用GetDC函数与对话框关联,使用后需要使用ReleaseDC函数取消关联。

三实验组织运行要求

实验前,由任课教师落实实验任务,每个学生事先编写好算法设计源程序代码。

集中上机、调试并通过计算机图形可视化演示操作实例。

四实验条件

为每个学生提供一台具有WINDOWS98/XP/NT/2000操作系统的计算机;同时提供VC++/VB/JAVA/TC等集成语言开发环境。

五实验步骤

1、建立基于对话框的MFC应用程序。

2、计算给定圆心与半径的五角星的顶点坐标,并存放于数组中。

3、编程实现并调试。

4、实验完毕后提交实验报告。

六源程序

voidCDrawDlg:

:

OnBnClickedButton1()

{

CDC*pDC=GetDC();

CStringmStr;

mStr="X";

pDC->MoveTo(0,200);

pDC->LineTo(400,200);

pDC->LineTo(390,190);

pDC->MoveTo(400,200);

pDC->LineTo(390,210);

pDC->TextOutA(380,220,mStr);

mStr="Y";

pDC->MoveTo(200,400);

pDC->LineTo(200,0);

pDC->LineTo(190,10);

pDC->MoveTo(200,0);

pDC->LineTo(210,10);

pDC->TextOutA(220,20,mStr);

mStr="O";

pDC->TextOutA(220,180,mStr);

ReleaseDC(pDC);

}

voidCDrawDlg:

:

OnBnClickedButton2()

{

CStringmFilter="压缩格式|*.jpg||";

CFileDialogmDlg(true,NULL,NULL,NULL,mFilter);

if(mDlg.DoModal()!

=IDOK)

return;

m_Image.Load(mDlg.GetPathName());

CDC*pDC=GetDC();

intW=m_Image.GetWidth();

intH=m_Image.GetHeight();

m_Image.Draw(pDC->m_hDC,0,0,W,H);

ReleaseDC(pDC);

}

voidCDrawDlg:

:

OnLButtonDown(UINTnFlags,CPointpoint)

{

p_DC=GetDC();

m_Draw=true;

CDialog:

:

OnLButtonDown(nFlags,point);

}

voidCDrawDlg:

:

OnMouseMove(UINTnFlags,CPointpoint)

{

if(m_Draw==true)

{

if(m_First==false)

{

p_DC->MoveTo(point.x,point.y);

m_First=true;

}

p_DC->LineTo(point.x,point.y);

}

CDialog:

:

OnMouseMove(nFlags,point);

}

voidCDrawDlg:

:

OnLButtonUp(UINTnFlags,CPointpoint)

{

m_Draw=false;

m_First=false;

CDialog:

:

OnLButtonUp(nFlags,point);

}

 

实验三——文件操作

实验学时:

4

实验类型:

综合/设计

实验要求:

必修

一实验目的

通过本次实验,熟悉CFile文件类的使用。

二实验内容

本实验使用CFile类通过MFC对话框向文件中插入字符串。

CFile是MFC文件类的基类,它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和内存文件。

CFile与CArchive类共同使用,支持MFC对象的串行化。

该类与其派生类的层次关系让程序通过多形CFile接口操作所有文件对象。

例如,一个内存文件相当一个磁盘文件。

使用CFile及其派生类进行一般目的的磁盘I/O,使用ofstream或其它Microsoft输入输出流类将格式化文本送到磁盘文件。

通常,一个磁盘文件在CFile构造时自动打开并在析构时关闭。

静态成员函数使你可以在不打开文件的情况下检查文件状态。

使用前包含头文件#include

CFile类的成员

数据成员

  m_hFile常包含操作系统文件句柄

构造函数

  CFile从一个路径或文件句柄构造一个CFile对象;

  Abort不管任何警告和错误,关闭一个文件;

  Duplicate构造一个基于该文件的副本;

  Open带错误检验选项,安全打开一个文件;

  Close关闭文件,删除对象。

输入/输出

  Read从文件的当前位置读数据;

  ReadHuge可从文件的当前位置读取大于64K数据,在32位编程中废弃了,见Read;

  Write将文件数据写入当前文件位置;

  WriteHuge可将文件的大于64K数据写到当前文件位置,在32位编程中废弃了,见Write;

  Flush溢去未被写入的任何数据。

定位

  Seek定位于当前文件指针;

  SeekToBegin定位当前文件指针到文件开头;

  SeekToEnd定位当前文件指针到文件尾;

  GetLength获取文件长度;

  SetLength改变文件长度。

封锁

  LockRange在文件中封锁一定范围内的字节;

  UnlockRange解锁一定范围内的字节。

状态

  GetPosition获取当前文件指针;

  GetStatus获取打开文件的状态;

  GetFileName获取被选文件的文件名;

  GetFileTitle获取被选文件的标题;

  GetFilePath获取被选文件的完整路径;

  SetFilePath设置被选文件的完整路径

静态

  Rename改名指定文件(静态函数);

  Remove删除指定文件(静态函数);

  GetStatus获取指定文件的状态(静态,虚函数);//注,此处错误:

静态函数不会是虚函数了。

  SetStatus设置指定文件的状态(静态,虚函数)//同上

三实验组织运行要求

实验前,由任课教师落实实验任务,每个学生事先编写好算法设计源程序代码。

集中上机、调试并通过计算机图形可视化程序。

四实验条件

为每个学生提供一台具有WINDOWS98/XP/NT/2000操作系统的计算机;同时提供VC++/VB/JAVA/TC等集成语言开发环境。

五实验步骤

1、建立基于对话框的MFC应用程序。

2、设计文件的创建、修改、保存模块。

3、编程实现并调试。

4、实验完毕后提交实验报告。

六源程序

CStringmStr1="c:

\\abc.txt";//CString为MFC中串类,亦包含于afx.h中,功能较string强大

CFilemFile;

mFile.Open(mStr1,CFile:

:

modeWrite|CFile:

:

modeCreate);//modeCreate模式指若无此文件,则创建之。

cout<

mFile.Write("c:

\\abc.txt",sizeof("c:

\\abc.txt"));

mFile.Close();

实验四——动态链接库

实验学时:

6

实验类型:

设计

实验要求:

必修

一实验目的

通过本次实验,熟练动态链接库文件的创建和动态调用方法。

二实验内容

本实验编写计算五角星顶点的dll文件,并调用该文件绘图。

在动态链接库文件程序中将需要导出的函数前加extern”C”_declspec(dllexport)。

程序中的一些不需要被主程序直接调用的函数前不需添加。

生成dll文件后,将其拷入需调用该dll的项目文件夹中。

在项目中用LoadLibrary、GetPoreAddress和FreeLibrary函数动态调用dll文件。

LoadLibrary函数原型为HMODULELoadLibrary(LPCTSTRlpFileName);

参数为指定可执行模块的名称。

返回值类型HMODULE和HINSTANCE句柄类型可通用。

FreeLibrary的原型与LoadLibrary类似。

GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。

函数原型

FARPROCGetProcAddress(

  HMODULEhModule,//DLL模块句柄

  LPCSTRlpProcName//函数名

  );

参数

  hModule

  包含此函数的DLL模

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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