使用API函数进行可视化编程(共12页)_第1页
使用API函数进行可视化编程(共12页)_第2页
使用API函数进行可视化编程(共12页)_第3页
使用API函数进行可视化编程(共12页)_第4页
使用API函数进行可视化编程(共12页)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上专心-专注-专业学生实验报告学生实验报告开课实验室:开课实验室:20112011 年年 6 6 月月 2929 日日学院学院年级、专年级、专业、班业、班姓名姓名学号学号实验课程名称实验课程名称程序设计基础实验程序设计基础实验成绩成绩实验项目名称实验项目名称使用使用 APIAPI 函数进行可视化编程函数进行可视化编程指导指导老师老师郭四稳郭四稳一、一、 实验目的实验目的1了解数组与数学矩阵的关系;2掌握数组的定义、引用与初始化;3理解二维数组数据的存储顺序;4理解并掌握冒泡排序法、选择排序法;5掌握字符数组与字符串的定义、引用;6了解字符串处理函数的用法。二、实验设备二

2、、实验设备1. 实验设备:计算机;2. 平台:Windows XP 操作系统,Visual C+ 6.0三、实验原理三、实验原理利用 Visual C+ 6.0 开发环境,对实验所要求的程序设计项目,编辑 C 语言源程序并形成 .cpp 源代码文件,再编译.cpp 文件形成 .boj 目标代码文件,经过.boj 文件与系统标准代码的连接形成 .exe 可执行代码文件, 运行.exe 文件以得到实验所期望的结果。四、实验步骤四、实验步骤1. 打开 PC 机并启动 Windows XP 操作系统(利用实验设备)2. 开启 Visual C+ 6.0 集成开发系统(形成软件开发环境)3. 程序设计(

3、按要求可先设计算法并给出流程图)4. 编辑(生成 .cpp 源程序文件)5. 编译(调试并生成 .boj 目标文件)6. 连接(调试并生成 .exe 可执行文件)7. 运行(调试并得到预期的程序执行结果)8. 按实验要求分析实验结果五、实验过程及原始纪录(数据,图表,计算等)五、实验过程及原始纪录(数据,图表,计算等)六、实验结果及分析六、实验结果及分析#include#include#include精选优质文档-倾情为你奉上专心-专注-专业long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);BOOL Ini

4、tWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)MSG Message;if(!InitWindowsClass(hInstance)return FALSE;if(!InitWindows(hInstance,nCmdShow)return FALSE;while(GetMessage(&

5、amp;Message,0,0,0)/消息循环TranslateMessage(&Message);DispatchMessage(&Message);return Message.wParam;long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)HDC hDC;/定义指向设备上下文的句柄HBRUSH hBrush;/定义指向画刷的句柄HPEN hPen;/定义指向画笔的句柄PAINTSTRUCT PtStr;/定义指向包含绘图信息的结构体变量switch(iMessage)/处理消息case

6、WM_PAINT:/处理绘图消息hDC=BeginPaint(hWnd,&PtStr);SetMapMode(hDC,MM_ANISOTROPIC);/设置映射模式hPen=(HPEN)GetStockObject(BLACK_PEN);/设置画笔为系统预定定义的黑色画笔hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH); /采用系统预定义的深灰色画刷SelectObject(hDC,hBrush);/选择画刷SelectObject(hDC,hPen);/选择画笔RoundRect(hDC,50,120,100,200,15,15);/圆角矩形hB

7、rush=(HBRUSH)GetStockObject(LTGRAY_BRUSH); /采用系统预定义的淡灰色画刷SelectObject(hDC,hBrush);/选择画刷Ellipse(hDC,150,50,200,150);/椭圆EndPaint(hWnd,&PtStr);/结束绘图return 0;case WM_DESTROY:/结束应用程序PostQuitMessage(0);return 0;default:/其他消息处理程序return(DefWindowProc(hWnd,iMessage,wParam,lParam) ;BOOL InitWindows(HINSTA

8、NCE hInstance,int nCmdShow)/初始化窗口HWND hWnd;hWnd=CreateWindow(WinFill,/生成窗口填充示例程序,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);if(!hWnd)return FALSE;ShowWindow(hWnd,nCmdShow);/显示窗口UpdateWindow(hWnd);return TRUE;BOOL InitWindowsClass(HINSTANCE hInstance)/定义窗口类WNDCLASS

9、WndClass;WndClass.cbClsExtra=0;WndClass.cbWndExtra=0;WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH);WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);WndClass.hIcon=LoadIcon(NULL,END);WndClass.hInstance=hInstance;WndClass.lpfnWndProc=WndProc;WndClass.lpszClassName=WinFill;WndClass.lpszMenuNam

10、e=NULL;WndClass.style=CS_HREDRAW|CS_VREDRAW;return RegisterClass(&WndClass);精选优质文档-倾情为你奉上专心-专注-专业输出结果输出结果:结果分析结果分析: 先建立一个先建立一个 API 应用程序应用程序, 使之完成窗口类的注册和窗口的初始使之完成窗口类的注册和窗口的初始化,在主函数化,在主函数 WinMainWinMain 中建立消息循环,从消息队列中取出消息并分发给中建立消息循环,从消息队列中取出消息并分发给窗口处理函数窗口处理函数 WndProcWndProc,而窗口处理函数而窗口处理函数 WndProcW

11、ndProc 中用中用 switchswitch 语句来判断语句来判断消息的类型消息的类型,判断它是什么消息判断它是什么消息,在为在为 WM_PAINTWM_PAINT 消息中先分别获取设备环消息中先分别获取设备环境和设置映射模式,再设置画笔和画刷的类型,然后画了一个椭圆和矩形境和设置映射模式,再设置画笔和画刷的类型,然后画了一个椭圆和矩形。* *选做选做【实验实验 7.1_27.1_2】使用 MFC 实现实验 7.1_1。实验步骤:1)利 用 AppWizard 创 建 一 个 MFC 项 目 (FileNewProjectsMFC_AppWizard(exe) ),名称为 chk,选择创建

12、单文档(Single Document)程序;2)在类中添加 (重载) OnDraw 函数 ( View ClassWizard Message Maps Classname 选 CchkView Member Functions 选 OnDraw OK 确定) ;3)在自动添加的 OnDraw 函数中的 TODO 注释下添加作图代码。添加代码后的 OnDraw函数如下:void CChkView:OnDraw(CDC* pDC)CChkDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native d

13、ata here/* 以下为添加代码 */CGdiObject* pOldBrush, * pOldPen;pOldBrush = pDC-SelectStockObject(DKGRAY_BRUSH); /选择画刷,并保存当前画刷pOldPen = pDC-SelectStockObject(BLACK_PEN);/选择画笔,并保存当前画笔pDC-RoundRect(50,120,100,200,15,15);/圆角矩形pDC-SelectStockObject(LTGRAY_BRUSH);/选择画刷pDC-Ellipse(150,50,200,150);/椭圆pDC-SelectObjec

14、t(CBrush*)pOldBrush);/恢复之前的画刷pDC-SelectObject(CPen*)pOldPen);/恢复之前的画笔输出结果输出结果:精选优质文档-倾情为你奉上专心-专注-专业#includelong WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);/主函数intWINAPIWinMain(HINSTANCE

15、hInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)MSG Message;if(!InitWindowsClass(hInstance)return FALSE;if(!InitWindows(hInstance,nCmdShow)return FALSE;while(GetMessage(&Message,0,0,0)/消息循环TranslateMessage(&Message);DispatchMessage(&Message);return Message.wParam;/消息处理函数long

16、WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)#define BufSize 15/设置存放字符的缓冲区大小static char cCharBufBufSize;/设置静态字符数组,存放输入的字符,字符个数不能超出缓冲区大小static int nNumChar=0;/现有字符个数static int nArrayPos=0;/字符的位置static int nLnHeight;static int nCharWidth;int x;HDC hDC;TEXTMETRIC tm;PAINTSTRUCT PtStr;

17、/定义指向包含绘图信息的结构体变量switch(iMessage)/处理消息case WM_CHAR:/遇到非系统字符所作的处理if(wParam=VK_BACK)/处理“遇到回退键的消息”if(nArrayPos=0)/如果已经在一行文字的开始处,则提示用户不能回退MessageBox(hWnd,当前位置是文本的起始位置,不能回退,NULL,MB_OK);elsenArrayPos=nArrayPos-1;/每按一次回退键就回退一个字符的位置nNumChar=nNumChar-1;/对现有字符总数进行计数InvalidateRect(hWnd,NULL,TRUE);/刷新用户区,并向应用程序

18、发送WM_PAINT 消息break;if(wParam=VK_ESCAPE)/处理按下 Escape 键消息MessageBox(hWnd,您现在不能按 ESC 键,请继续其它操作,NULL,MB_OK);break;if(nNumChar=BufSize)/如果写入的字符数超过缓冲区大小,则报警MessageBox(hWnd,缓冲区已满,不能再输入字符了n 若需要删除字符,请用BackSpace 键,NULL,MB_OK);break;for(x=nNumChar;xnArrayPos;x=x-1)cCharBufx=cCharBufx-1;cCharBufnArrayPos=(unsig

19、ned char)wParam;nArrayPos=nArrayPos+1;nNumChar=nNumChar+1;InvalidateRect(hWnd,NULL,TRUE);break;case WM_CREATE:/处理窗口创建消息hDC=GetDC(hWnd);GetTextMetrics(hDC,&tm);/获取字体信息nLnHeight=tm.tmHeight+tm.tmExternalLeading;nCharWidth=tm.tmAveCharWidth;ReleaseDC(hWnd,hDC);break;case WM_KEYDOWN:/处理按下键消息switch(w

20、Param)case VK_END:/处理按下键为 End 时的消息nArrayPos=nNumChar;/输入位置从本行的末尾开始break;精选优质文档-倾情为你奉上专心-专注-专业case VK_HOME:/处理按下键为 Home 时的消息nArrayPos=0;/输入位置为本行的起始位置break;case VK_DELETE:/处理按下键为 Delete 时的消息if(nArrayPos=nNumChar)/输入位置处于本行的末尾MessageBox(hWnd,缓冲区已空,没有字符可供删除,NULL,MB_OK);elsefor(x=nArrayPos;x0)nArrayPos=nA

21、rrayPos-1;/当前输入位置往前移一个位置,再输入字符时,等于插入字符else/已经移到起始输入位置,不能再往前了MessageBox(hWnd, 您 已 经 移 动 到 起 始 位 置 , 不 能 再 往 左 移 动 了,NULL,MB_OK);break;case VK_RIGHT:/处理按下右方向键时的消息if(nArrayPosnNumChar)/如果当前位置没有到缓冲区的最后位置,还能向右移动nArrayPos=nArrayPos+1;elseMessageBox(hWnd, 已 经 到 缓 冲 区 的 末 尾 , 不 能 再 向 右 移 动 了,NULL,MB_OK);bre

22、ak;break;case WM_PAINT:/处理重画消息hDC=BeginPaint(hWnd,&PtStr);TextOut(hDC,nCharWidth,nLnHeight,cCharBuf,nNumChar); /输出缓冲区中的文本EndPaint(hWnd,&PtStr);break;case WM_DESTROY:/处理结束应用程序消息PostQuitMessage(0);/结束应用程序break;default:/其他消息处理程序return(DefWindowProc(hWnd,iMessage,wParam,lParam) ;return 0;BOOL In

23、itWindowsClass(HINSTANCE hInstance)/初始化窗口类WNDCLASS WndClass;WndClass.cbClsExtra=0;WndClass.cbWndExtra=0;WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH);WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);WndClass.hIcon=LoadIcon(NULL,END);WndClass.hInstance=hInstance;WndClass.lpfnWndProc=WndProc;

24、WndClass.lpszClassName=WinKeyboard;WndClass.lpszMenuName=NULL;WndClass.style=CS_HREDRAW|CS_VREDRAW;return RegisterClass(&WndClass);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)/初始化窗口HWND hWnd;hWnd=CreateWindow(WinKeyboard,/生成窗口键盘操作例程,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,

25、NULL,hInstance,NULL);if(!hWnd)return FALSE;ShowWindow(hWnd,nCmdShow);/显示窗口UpdateWindow(hWnd);/绘制用户区return TRUE;精选优质文档-倾情为你奉上专心-专注-专业输出结果:输出结果:结果分析:在程序中,主要是对按键消息的处理。结果分析:在程序中,主要是对按键消息的处理。在窗口处理函数中在窗口处理函数中,用用 swithswith 语句判断传来的消息语句判断传来的消息,如果是如果是 遇到回退键的消息遇到回退键的消息 ,则则先判断是否在文本的开始处,如果是显示对话框告知用户当前是文本的开始处,不能

26、先判断是否在文本的开始处,如果是显示对话框告知用户当前是文本的开始处,不能删除!如果不是则删除上一级的文本。删除!如果不是则删除上一级的文本。如果是如果是 EscapeEscape 键消息,则显示对话框告知用户现在不能按键消息,则显示对话框告知用户现在不能按 ESCESC 键,请继续其它操作键,请继续其它操作。如果写入的字符数超过缓冲区大小,则报警如果写入的字符数超过缓冲区大小,则报警而处理按下键为而处理按下键为 EndEnd 时的消息和处理按下键为时的消息和处理按下键为 HomeHome 时的消息,处理按下键为时的消息,处理按下键为 DeletDelete e时的消息时都有相应的操作!时的消

27、息时都有相应的操作!#include#include#includeBOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)MSG Message;if(!InitWindowsClass(hInstance)return FALSE;if(!InitWindows(hInstance,nCmd

28、Show)return FALSE;while(GetMessage(&Message,0,0,0)/消息循环TranslateMessage(&Message);DispatchMessage(&Message);return Message.wParam;LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)WORD x,y;/定义表示坐标的变量HCURSOR hCursor;/定义表示鼠标的变量switch(iMessage)/消息处理case WM_MOUSEMOVE:/

29、处理鼠标移动消息x=LOWORD(lParam);/取得鼠标所在位置的坐标值y=HIWORD(lParam);if(x=50&x=50&y=50&x=50&y=100&x=50&y=150&x=50&y=50&x=100&y=100&x=100&y=250&x=100&y=50&x=150&y=100&x=150&y=250&x=150&y=300)hCursor=LoadCursor(NULL,IDC_WAIT);/沙漏光标SetCu

30、rsor(hCursor);elsehCursor=LoadCursor(NULL,IDC_ARROW);/其他区域设置成普通的箭头光标SetCursor(hCursor);return 0;case WM_DESTROY:/处理结束应用程序消息PostQuitMessage(0);/结束应用程序return 0;default:/其他消息处理程序return(DefWindowProc(hWnd,iMessage,wParam,lParam) ;BOOL InitWindowsClass(HINSTANCE hInstance)/初始化窗口类WNDCLASS WndClass;WndClas

31、s.cbClsExtra=0;WndClass.cbWndExtra=0;WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH);WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);WndClass.hIcon=LoadIcon(NULL,END);WndClass.hInstance=hInstance;WndClass.lpfnWndProc=WndProc;WndClass.lpszClassName=WinMouse;WndClass.lpszMenuName=NULL;WndClass

32、.style=CS_HREDRAW|CS_VREDRAW;return RegisterClass(&WndClass);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)/初始化窗口HWND hWnd;hWnd=CreateWindow(WinMouse,/生成窗口鼠标及光标形状设置示例,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);if(!hWnd)return FALSE;ShowWindow(hWnd,nCmdShow)

33、;/显示窗口UpdateWindow(hWnd);return TRUE;输出结果:精选优质文档-倾情为你奉上专心-专注-专业#include/窗口函数说明LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)static char szAppName = 菜单示例;/窗口类名HWND hwnd;/窗口句柄MSG msg;/窗口信息WNDCLASSEX wndclass;/窗口类,可以是 WNDCLASSwndclass.cbSize = sizeof(wndclass);wndclass.style = CS_HREDRAW|CS_VREDRA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论