windows程序设计实验报告解析_第1页
windows程序设计实验报告解析_第2页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、四川师范大学计科学院实验报告册院系名称:计算机科学学院课程名称:Windows程序设计实验学期2013年至2014年 第一学期专业班级:软件工程12级4班姓名:何定宇学号:2012110409指导教师:冯朝胜实验最终成绩:实验报告须知1学生填写实验报告应按规范填写,填写格式见由任课老师给出的 实验报告样本;2学生应填写的内容包括:封面相关栏目、第一页中 本学期(年) 开设实验课程情况一览表 中的实验名称、 学时数;每次报告中的实 验性质、同组人姓名、实验日期、以及实验报告中的一至五项;3教师填写内容为:实验评价、每次报告成绩、第一页中本学期(年)开设实验课程情况一览表中 成绩、及封面的实验最终

2、成绩;4学生实验结束后,教师应对学生实验结果进行核实,学生方可离 开实验室。5、实验成绩等级分为(90100分)优,(8089分)良,(70-79分)中,(6069分)及格,(59分)不及格。6本实验册应妥善保管,本课程实验结束后应交回实验室本学期(年)开设实验课程情况一览表序号实验名称(学生实验后填写)学时数成绩(分数或等级)1Visual C+ 6.0 开发环境实验2Windows 应用程序基本框架头验3Windows 绘图试验4文本的输出方法与子体设置实验5键盘消息的响应实验6鼠标消息的响应实验7资源在 Windows 编程中的应用实验8控件 API 编程9在 MFC 中创建应用程序资源

3、10单文档与多文档11综合性实验121314151617181920实验报告(一)实验名称Visual C+6.0 开发环境实验同组人姓名实验性质基本操作验证性综合性设计性实验日期实验成绩教师评价:实验预习口 实验操作口 实验结果口 实验报告口 其它口教师签名:、实验目的及要求了解 Visual C+6.0 的特点,熟悉 Visual C+6.0 的开发环境。二、实验内容了解和熟悉开发环境,对各种菜单功能,工程文件管理和MSDN 帮助功能有完整的了、主要设备及软件Win dows 2000+VC 6.0+MSDN四、实验流程、操作步骤或核心代码、算法片段五、实验结果的分析与评价实验报告(二)实

4、验名称Windows 应用程序基本框架头验同组人姓名实验性质基本操作验证性综合性设计性实验日期实验成绩教师评价:实验预习口 实验操作口 实验结果口 实验报告口 其它口教师签名:一、实验目的及要求编写第一个 Win dows 程序,理解入口函数 Winm ai n 和窗口函数 Win Proc,掌握消息驱动机 制。二、实验内容使用 Win32 Applicatio n 模板建立一个 Win32 工程,编写一个包含WinM ai n. Win Proc 的基本Windows 程序,并编译、运行,观察结果。、主要设备及软件Win dows 2000+VC 6.0+MSDN四、实验流程、操作步骤或核心

5、代码、算法片段#i nclude stdafx.h#i nclude resource.h#defi ne MAX_LOADSTRING 100/ Global Variables:HINSTANCE hln st;/ curre nt in sta neeTCHAR szTitleMAX_LOADSTRING;/ The title bar textTCHAR szWindowClassMAX_LOADSTRING;/ The titlebar text/ Foward declarations of functions included in this code module:ATOMMy

6、RegisterClass(HINSTANCE hI nsta nee);BOOLInitln sta nce(HINSTANCE, i nt);LRESULT CALLBACK Wn dProc(HWND, UINT, WPARAM, LPARAM);LRESULT CALLBACK A bout(HWND, UINT, WPARAM, LPARAM);int APIENTRY Win Mai n( HINSTANCE hln sta nee,HINSTANCE hPrevI nsta nee,LPSTRlpCmdLi ne,intn CmdShow)/ TODO: Place code h

7、ere.MSG msg;HACCEL hAccelTable;/In itialize global stri ngsLoadStri ng(hI nsta nee, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadStri ng(hI nsta nee, IDC_SDK, szWi ndowClass, MAX_LOADSTRING);MyRegisterClass(hI nsta nee);/ Perform applicati on in itializati on:if (!I nitln sta nee (hln sta nee, n CmdS

8、how)return FALSE;return RegisterClassEx(&wcex);hAccelTable = LoadAccelerators(hl nsta nee, (LPCTSTR)IDC_SDK);/ Main message loop:while (GetMessage(&msg, NULL, 0, 0)if (!Tra nslateAccelerator(msg.hw nd, hAccelTable, & msg) Tran slateMessage(&msg);DispatchMessage(&msg);return msg.w

9、Param;ATOM MyRegisterClass(HINSTANCE hln sta nee)WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style=CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = (WNDPROC)WndProc;wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hl nsta nee=hln sta nee;wcex.hlco n=Loadlco n(hl nsta nee, (LPCTSTR)IDI_SDK);wcex.hCurso

10、r = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackgro und=(HBRUSH)(COLOR_WINDOW+1);wcex.lpszMe nu Name=(LPCSTR)IDC_SDK;wcex.lpszClassName=szWi ndowClass;wcex.hlco nSm = Loadlco n(wcex.hl nsta nee, (LPCTSTR)IDI_SMALL);return DefWi ndowProc(hWnd, message, wParam, IParam);/FUNCTION: In it In sta nce(HANDLE,

11、i nt)/PURPOSE: Saves in sta nee han dle and creates main win dow/ COMMENTS:/In this fun cti on, we save the in sta nee han dle in a global variable and/create and display the main program win dow./BOOL Initln sta nce(HINSTANCE hln sta nee, i nt n CmdShow)HWND hWnd;hlnst = hln sta nee; / Store in sta

12、 nee han dle in our global variablehWnd = CreateWi ndow(szWi ndowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hI nsta nee, NULL);if (!hWnd)return FALSE;ShowWi ndow(hWnd, n CmdShow);UpdateWi ndow(hWnd);return TRUE;LRESULT CALLBACK WndProc(HWND hWnd, UINT message

13、, WPARAM wParam, LPARAM lParam)int wmld, wmEve nt;PAINTSTRUCT ps;HDC hdc;TCHAR szHelloMAX_LOADSTRING;LoadStri ng(hl nst, IDS_HELLO, szHello, MAX_LOADSTRING);switch (message)case WM_COMMAND:wmId = LOWORD(wParam);wmEve nt = HIWORD(wParam);/ Parse the menu select ions:switch (wmId)case IDM_ABOUT:Dialog

14、Box(hI nst,(LPCTSTR)IDD_ABOUTBOX,(DLGPROC)About);break;case IDM_EXIT:DestroyWi ndow(hWnd);break;default:return DefWi ndowProc(hWnd, message, wParam, lParam);break;case WM_PAINT:hdc = Begi nPai nt(hWnd, & ps);RECT rt;GetClie ntRect(hWnd, & rt);DrawText(hdc,你好, strlen(” 你好),&rt, DT_CENTER)

15、;En dPai nt(hWnd, & ps);break;case WM_DESTROY:PostQuitMessage(O);break;default:hWnd,return DefWi ndowProc(hWnd, message, wParam, IParam);return 0;/ Mesage han dler for about box.LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAMIParam)switch (message)case WMNITDIALOG:return TR

16、UE;case WM_COMMAND:if (LOWORD(wParam) = IDOK | LOWORD(wParam) = IDCANCEL)En dDialog(hDlg, LOWORD(wParam);return TRUE;break;return FALSE;五、实验结果的分析与评价实验报告(三)实验名称Windows 绘图试验同组人姓名实验性质基本操作验证性综合性设计性实验日期实验成绩教师评价:实验预习口实验操作口实验结果口实验报告口其它口教师签名:一、实验目的及要求理解 DC 概念,掌握坐标映射的设置方法,熟悉Windows 绘图的基本方法和函数。二、实验内容运用 Window

17、s 提供的 GDI 函数,完成窗口图形输出功能。、主要设备及软件Win dows 2000+VC 6.0+MSDN四、实验流程、操作步骤或核心代码、算法片段1)将窗口划分为 5 个区域,并用白色到黑色线性变化的颜色填充这5 个区域,画一条斜线穿过这 5 个区域;#i nclude#in clude#i nclude#i ncludeLRESULT CALLBACK WndProc(HWND,UINT,WPARA M,L PARAM);int WINAPI WinMain(HINSTANCEhInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,intn

18、CmdShow)HWND hwn d;MSG Msg;WNDCLASS wn dclass;char lpszClassName=qwer;char lpszTitle=My_Drawi ng;wn dclass.style=0;wn dclass .l pfnWndProc=WndProc;wn dclass.cbClsExtra=O;wn dclass.cbWndExtra=0;wn dclass.h In sta nce=hl nsta nee;wn dclass.hIco n=Loadlco n(NULL,IDI_APPLICATION);wn dclass.hCursor=LoadC

19、ursor(NULL,IDC_ARROW);wn dclass.hbrBackgrou nd=(HBRUSH)GetStockObject(WHITE_BRUSH);wn dclass .l pszMe nu Name=NULL;wn dclass .l pszClassName=lpszClassName;if(!RegisterClass(&wn dclass)MessageBeep(O);return FALSE;hwn d=CreateWi ndow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USE

20、DEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hl nsta nee, NULL);ShowWi ndow(hw nd,n CmdShow);UpdateWi ndow(hw nd);while(GetMessage(&Msg,NULL,O,O)Tran slateMessage(&Msg);DispatehMessage(&Msg);return Msg.wParam;LRESULT CALLBACK WndProc(HWND hwn d,UINT message,WPARAM wPara m,L PARAM lParam

21、)HDC hde;PAINTSTRUCT ps;HPEN hP;HBRUSH hB;switeh(message)ease WM_PAINT:hde=Beg inPain t(hw nd,&ps);SetMapMode(hde,MM_TEXT);hB=(HBRUSH)GetStockObject(WHITE_BRUSH);SelectObject(hdc,hB);Reeta ngle(hdc,O,O,1OO,4OO);hB=(HBRUSH)GetStockObject(LTGRAY_BRUSH);SelectObjeet(hdc,hB);Recta ngle(hdc,100,0,200

22、,400);hB=(HBRUSH)GetStockObject(GRAY_BRUSH);SelectObject(hdc,hB);Recta ngle(hdc,200,0,300,400);hB=(HBRUSH)GetStockObject(DKGRAY_BRUSH); SelectObject(hdc,hB);Recta ngle(hdc,300,0,400,400);hB=(HBRUSH)GetStockObject(BLACK_BRUSH);SelectObject(hdc,hB);Recta ngle(hdc,400,0,500,400);hP=CreatePe n(PS_SOLID,

23、5O,RGB(255,255,255);SelectObject(hdc,hP); MoveToEx(hdc,450,300,NULL);Li neTo(hdc,50,150);En dPai nt(hw nd,&ps);DeleteObject(hP);DeleteObject(hB);break;case WM_DESTROY:PostQuitMessage(O);break;default:retur n DefWin dowProc(hw nd,message,wParam,IParam);return 0;2)编写一个程序,在屏幕上出现一个圆心沿正弦曲线轨迹移动的实心圆,而且

24、,每隔四 分之一周期,圆的填充色和圆的周边颜色都发生变化,同时,圆的半径在四分之一周期之内由 正弦曲线幅值的 0.2 倍至 0.6 倍线性增长。#i nclude#i nclude#in clude#in clude#define Pi 3.1415926long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wPara m, LONG IParam);double dfTheta=0,dfRa nge=100.0;long i=0,j=0;long ICentreX=0,ICentreY=0,IRadious=(long)(0.2*dfRange);

25、POINT lpS in 100;int WINAPI WinMain(HINSTANCEhInstance,HINSTANCE hPrevInst,LPSTRn CmdShow)HWND hwndMSG MessageWNDCLASS wn dclasswn dclass.cbClsExtra=0;wn dclass.cbWndExtra=0;wn dclass.hI nsta nce=h In sta nee;wn dclass.hCursor=LoadCursor(NULL,IDC_ARROW)wn dclass.lpszMe nu Name=NULL; /wn dclass.lpszC

26、lassName=SINwn dclass.hIco n=Loadlco n(NULL,IDI_APPLICATION); /窗口的最小化图标为缺省图标wndclass.lpfnWndProc=WndProc; / 定义窗口处理函数wn dclass.style=0;if(!RegisterClass( &wndclass) /如果注册失败则发出警告 MessageBeep(0)return FALSE /- 创建窗口 -hwn d=CreateWi ndow(SIN,qwer,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NU

27、LL,lpszCmdL in e,intNULL,hln sta nee, /创建此窗口的应用程序的当前句柄NULL);/-显示窗口ShowWi ndow( hwnd, n CmdShow)/- 绘制用户区UpdateWi ndow(hw nd);for(int j=O;j1OO;j+) /生成正弦曲线的点坐标lpSi nj.x=(lo ng)(j*2*Pi/100*60);lpSi nj.y=(lo ng)(dfRa nge*si n(j*2*Pi/100);while( GetMessage(&Message, 0, 0, 0)Tran slateMessage( &Mes

28、sage)DispatchMessage( &Message)return Message.wParam; /消息循环结束即程序终止时将信息返回系统long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wPara m, LONG lParam) HDC hDC;/定义指向设备的句柄HBRUSH hBrush; /定义指向画刷的句柄HPEN hPe n; /定义指向画笔的句柄PAINTSTRUCT PtStr;/定义指向包含绘图信息的结构体变量switch(iMessage) / 处理消息case WM_PAINT: /处理绘图消息hDC=Be

29、gi nPai nt(hWnd,&PtStr);SetWi ndowOrgEx(hDC,-200,-200,NULL); / 设置映像模式 hPen=CreatePen(PS_DASH,1,RGB(255,0,0); /黑色画笔 SelectObject(hDC,hPen); / 选择画笔Polyli ne(hDC,lpSi n,100);if(i=25) / 第一个 1/4 周期hPen=CreatePen(PS_DASH,1,RGB(255,0,0);hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0);IRadious=(lo ng)

30、(dfRa nge*0.2+i%25*dfRa nge*0.4/25);计算半径else if(i=50)hPe n=CreatePe n(PS_DASH,1,RGB(0,255,0);hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0); lRadious=(lo ng)(dfRa nge*0.2+i%25*dfRange*0.4/25);计算半径else if(i=75)hPe n=CreatePe n(PS_DASH,1,RGB(0,0,255);hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,0,255

31、); lRadious=(lo ng)(dfRa nge*0.2+i%25*dfRange*0.4/25);计算半径elsehPe n=CreatePe n(PS_DASH,1,RGB(255,255,0);hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,0); lRadious=(lo ng)(dfRa nge*0.2+i%25*dfRange*0.4/25);计算半径SelectObject(hDC,hBrush);选择画刷SelectObject(hDC,hPe n);lCentreX=lpSini.x;/ 圆心 x 坐标lCentreY

32、=lpSini.y; / 圆心 y 坐标Ellipse(hDC,lCe ntreX-IRadious,ICe ntreY-lRadious,lCentreX+IRadious,ICentreY+IRadious); / 画圆 i+;DeleteObject(hPe n); / 删除画笔DeleteObject(hBrush); / 删除画刷En dPai nt(hWnd, &PtStr); II 删除设备环境指针Sleep(IOO); II 停 0.1 秒if(i100) InvalidateRect(hWnd,NULL,1);刷新用户区return 0;case WM_DESTROY

33、:关闭窗口PostQuitMessage(O);return 0;default:retur n( DefWi ndowProc(hWnd,iMessage,wParam,IParam);五、实验结果的分析与评价实验报告(四)实验名称文本的输出方法与子体设置同组人姓名实验性质基本操作验证性综合性设计性实验日期实验成绩教师评价:实验预习口 实验操作口 实验结果口 实验报告口 其它口教师签名:、实验目的及要求理解字体句柄的念,熟悉Windows 文字输出的基本方法和函数,学习字体格式的控制。二、实验内容(选做 1 个)1、 在窗口中显示出 26 个英文字母,从左向右字母依次位置提高10 个像素单位

34、,并且颜色变为红色,然后回到正常位置;当到达最右端后改变方向从右向左依次变成红色并位置提高10个像素单位。在窗口的第二行显示26 个字母,字体从正常到斜体,颜色从黑色到天蓝色不断变换。2、 编写一个程序,在窗口中显示“VC 中显示字体与背景”,字体颜色为红色,背景色为黄 色,字体为宋体,字高 40。、主要设备及软件四、实验流程、操作步骤或核心代码、算法片段1 )在窗口中显示出26 个英文字母,从左向右字母依次位置提高10 个像素单位,并且颜色变为红色,然后回到正常位置;当到达最右端后改变方向从右向左依次变成红色并位置提高 10 个像素单位。在窗口的第二行显示26 个字母,字体从正常到斜体,颜色

35、从黑色到天蓝色不断变换。#in elude #in elude #i nclude #i nclude int a=0;/函数提前声明BOOL InitWin dowsClass(HINSTANCE hln sta nee);BOOL InitWin dows(HINSTANCE hln sta nee, i nt n CmdShow);long WINAPI WndProe(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam);BOOL InitWin dowsClass(HINSTANCE hln sta nee)/ 初始化窗口类WNDCL

36、ASS WndClass;WndClass.ebClsExtra = 0;WndClass.ebWndExtra = 0;WndClass.hbrBaekgrou nd = (HBRUSH):GetStockObject(WHITE_BRUSH); WndClass.hCursor= :LoadCursor(NULL, IDC_ARROW);WndClass.hIcon = :LoadIcon(NULL, END);WndClass.hI nsta nee = hln sta nee;WndClass.lpszClassName = WinF ill; WndClass.lpfnWndProe

37、 = WndProe; WndClass.lpszMenu Name = NULL; WndClass.style = CS_HREDRAW | CS_VREDRAW;return (:RegisterClass(&WndClass);/BOOL InitWin dows(HINSTANCE hI nsta nee, i nt n CmdShow)/ 初始化窗口HWND hWnd;hWnd = :CreateWindow(WinFill, 填充实例程序,WS_OVERLAPPEDWINDOW, 窗口类型 250,150,450,450,NULL,NULL,hl nsta nce,NUL

38、L);if (!hWnd)return FALSE;:ShowWi ndow(hWnd, n CmdShow);:UpdateWi ndow(hWnd);return TRUE;long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wPara m,L ONG lParam)HDC hdc;/设置环境句柄char str=abcdefghijkl mn opqrstuvwxyz;int i=0;static n;PAINTSTRUCT ps;TEXTMETRIC tm;int L Y=50;/初始坐标HFONT hF_black,hF_blue;/ 字

39、体句柄switch(iMessage) case WM_CREATE:SetTimer(hWnd,1,300,NULL);break;case WM_PAINT:hdc=Begi nPai nt(hWnd,&ps);GetTextMetrics(hdc,&tm);获取默认句柄,写入 tm 结构中for(i=0;i26;i+)int y=L Y;LYif(i=n)if(a=O)0,1y=LY-30;else y=LY+30;SetTextColor(hdc,RGB(255,0,0); / 设置单个的颜色为红TextOut(hdc,2*i*tm.tmAveCharWidth,y,

40、&stri,1); 依次为字符串起始坐标,所显示的字符串,输出的字节数SetTextColor(hdc,RGB(0,0,0); / 设置整排的颜色为黑if (n %2=0)/当时钟为偶数时显示黑色字体hF_black=CreateFo nt( 30,/ 字体的高度0,0,0,FW_NORMAL,字体的粗度0,定义斜体0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,正常);SelectObject(hdc,hF_black);GetTextMetrics(hdc

41、, &tm);for (i=0;i26;i+)SetTextColor(hdc,RGB(0,0,0);TextOut(hdc,(25-i)*tm.tmAveCharWidth,L Y+3*tm.tmHeight+tm.tml nternalLeadi ng, &str25-i,1);elsehF_blue=CreateFont( 20,字体的高0,1度0,FW_HEAVY,字体的粗度1,/定义斜体0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,粗体字”

42、);SelectObject(hdc,hF_blue);GetTextMetrics(hdc, &tm);for (i=0;i26;i+)SetTextColor(hdc,RGB(0,0,255);TextOut(hdc,(25-i)*tm.tmAveCharWidth,L);En dPai nt(hWnd,&ps);break;case WM_TIMER:n+;if (n=26)n=0;RECT rc;GetClie ntRect(hWnd, &rc);In validateRect(hWnd,&rc,true);UpdateWi ndow(hWnd);bre

43、ak;case WM_KEYDOWN:Y+3*tm.tmHeight+tm.tmI nternalLeadi ng,&str25-i,1/获取当前窗口可用区/对该区域进行刷新switch(wParam)case VK_UP:/ 减速a=0;In validateRect(hWnd, &rc,true);break;case VK_DOWN:加速a=1;In validateRect(hWnd, &rc,true);break;return 0;case WM_DESTROY:KillTimer(hWnd,1);/ 删除计时器PostQuitMessage(O);defa

44、ult:return DefWi ndowProc(hWnd,iMessage,wParam,IParam);return 0;int WINAPIWin Mai n( HINSTANCEhI nsta nee, HINSTANCEhPrevI nsta nee,lpCmdLi ne, i nt n CmdShow)MSG Message;if (!I nitWin dowsClass(hI nsta nee)return FALSE;if (!I nitWin dows(hI nsta nee, n CmdShow)LPSTRreturn FALSE;while (:GetMessage(&

45、amp;Message, 0, 0, 0):Tra nslateMessage(&Message);:DispatchMessage(&Message);return Message.wParam;五、实验结果的分析与评价a b c d efg h i j k I mn opqr s t u v wx y zabcdefghijklmnopqrstuvwxyz丽宇悻显示实例程序实验报告(五)实验名称键盘消息的响应实验同组人姓名实验性质基本操作验证性综合性设计性实验日期实验成绩教师评价:实验预习口实验操作口实验结果口实验报告口其它口教师签名:一、实验目的及要求理解 Windows

46、 程序响应键盘操作的原理,熟悉键盘消息的响应编程。二、实验内容(选做 1 个)1)设计一个窗口,在该窗口中练习键盘的响应,要求如下:单击键盘上的向上箭头时,窗口 中显示 “You had hitted the upkey”;单击 键时,窗口 中显示 You had hitted the SHIFT key ”;单击键时,窗口中显示 You had hitted the CTRL key”;单击键时,窗口中显示 You had hittedthe CTRL A key ”;单击 键时,窗口中显示 “ You had hitted the SHIFT Bkey”。2)编写一个键盘消息处理程序,单击

47、一个按键后,在窗口依次显示出:按键消息,参数wParam 的值;若为字符消息还要显示相应得字符;重复计位数;OEM 扫描码;扩展按键标志;ALT 按下状态;按键的先前状态;转换状态。测试:依次按下Ctrl,Shift,Alt,a,b, “向上箭头键”,“向右箭头键”和 Ctrl.、主要设备及软件Win dows 2000+VC 6.0+MSDN四、实验流程、操作步骤或核心代码、算法片段1)设计一个窗口,在该窗口中练习键盘的响应,要求如下:单击键盘上的向上箭头时,窗口 中显示 “You had hitted the upkey ”;单击 键时,窗口 中显示 You had hitted the

48、SHIFTkey ”;单击 键时,窗口中显示 You had hitted the CTRL key”;单击 键时,窗口中 显示 You had hitted the CTRL A key ”;单击 键时,窗口 中显示 “You had hitted the SHIFT Bkey ”。long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wPara m,L ONG IParam)HDC hDC;定义设备环境句柄PAINTSTRUCT ps;HPEN hPe n;/定义包含绘图信息的结构体变量/定义画笔句柄。HBRUSH hBrush;/以下定义输出的

49、字符串。/定义画刷句柄static char cUp=You had hitted the UP key;static char cCtrl=You had hitted the Ctrl key;static char cShift=You had hitted the SHIFT key;static char cCtrl_A=You had hitted the CTRL A key;static char cShift_B=You had hitted the SHIFT B key;/下面定义并初始化按键标志变量。static BOOL nU pKeyDow n=FALSE,n Sh

50、iftKeyDow n=FALSE,n CtrlKeyDow n=FALSE,n CtrlAKeyDow n=FALSE,n ShiftBKeyDow n=FALSE;switch(iMessage) case WM_KEYDOWN: switch(wParam) case VK_UP:/当按上箭头键时,变量置为真。nU pKeyDow n = TRUE; break;case VK_SHIFT:当按 shift 键时,变量置为真。n ShiftKeyDow n = TRUE; break;case VK_CONTROL:/当按 control 键时,变量置为真n CtrlKeyDow n =

51、 TRUE;break;default: break;break;case WM KEYUP:In validateRect(hWnd,NULL,FALSE); break;case WM_CHAR:if(wParam=(65 & K_CONTROL) if(n CtrlKeyDow n = TRUE) n CtrlAKeyDow n = TRUE;nCtrlKeyDow n = FALSE; else if(wParam=98|wParam=66)SelectObject(hDC,hBrush);SetTextColor(hDC,RGB(255,0,0);II 输出信息。if(nU

52、pKeyDow n = TRUE) Recta ngle(hDC,0,0,300,200);TextOut(hDC,O,O,cUp,strle n(cUp);n UpKeyDow n = FALSE;else if(n CtrlAKeyDow n = TRUE) Recta ngle(hDC,0,0,300,200);TextOut(hDC,O,1OO,cCtrl_A,strle n(cCtrl_A);n CtrlAKeyDow n = FALSE;n CtrlKeyDow n = FALSE;else if(n CtrlAKeyDow n = TRUE)else if(n CtrlKeyDo

53、w n = TRUE&n CtrlAKeyDow n = FALSE) Recta ngle(hDC,0,0,300,200);TextOut(hDC,O,6O,cCtrl,strle n( cCtrl);当按下 b 键时 if(n ShiftKeyDow n =TRUE)检查 shift 键是否处于按下状态。n ShiftBKeyDow n = TRUE; /SHIFT 键按下时,变量置为真n ShiftKeyDow n =FALSE;break;case WM PAINT:处理绘图消息.hDC=Begi nPa int(hWnd,&ps);hBrush = (HBRUSH)

54、GetStockObject(WHITE_BRUSH);创建 白画刷。hPe n = (HPEN)GetStockObject(WHITE_PEN);/创建白画笔。SelectObject(hDC,hPen);选入白画刷 选入白画笔II 设置字体颜色为红色。n CtrlKeyDow n = FALSE;else if(n ShiftBKeyDow n = TRUE)Recta ngle(hDC,0,0,300,200);TextOut(hDC,0,0,cShift_B,strle n(cShift_B);n ShiftBKeyDow n = FALSE;n ShiftKeyDow n = FA

55、LSE;else if(n ShiftBKeyDow n = FALSE&n ShiftKeyDow n = TRUE)Recta ngle(hDC,0,0,300,200);TextOut(hDC,0,0,cShift,strle n(cShift);n ShiftKeyDow n = FALSE;Else/删除画笔和画刷DeleteObject(hPe n);DeleteObject(hBrush);En dPai nt(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(O); return 0;default:return(

56、DefWi ndowProc(hWnd,iMessage,wParam,IParam);return 0;2、编写一个键盘消息处理程序,单击一个按键后,在窗口依次显示出:按键消息,参数 wParam 的值;若为字符消息还要显示相应得字符;重复计位数;OEM 扫描码;扩展按键标志;ALT 按下状态;按键的先前状态;转换状态。测试:依次按下Ctrl,Shift,Alt,a,b, “向上箭头键”,“向右箭头键”和 Ctrl.#in clude #i nclude /全局变量RECT rc; /记录滚屏的矩形区域int xChar , yChar; / 文本输入点坐标WNDCLASSEX wn d;

57、/窗口类结构变量char szAppName=键盘消息监视程序 ;/ 窗口类名/函数声明LRESULT CALLBACK WndProc(HWND, UINT , WPARAM, LPARAM);BOOL MyRegisterClass(HINSTANCE hln sta nee);BOOL Initln sta nce(HINSTANCE hln sta nce,i nt iCmdShow);/ 函数:WinMain/作用:入口函数int WINAPIWinM ai n(H INSTANCEhln sta nce,HINSTANCEhPrevI nsta nee 丄 PSTRszCmdLin

58、e,int iCmdShow)MSG msg;if(!MyRegisterClass(hl nsta nee)return FALSE;if(! Ini tl nsta nce(hl nsta nce,iCmdShow)return FALSE;while (GetMessage (&msg, NULL, 0, 0)Tran slateMessage (&msg);DispatchMessage (&m sg);return msg.wParam;/ 函数:ShowKey/作用:实现在窗口中显示按键信息void ShowKey (HWND hwn d, i nt iTy

59、pe,char *szMessage,WPARAM wPara m 丄 PARAM lParam)static char *szFormat2 =%-14s %3d %c %6u %4d %5s %5s %6s %6s,%-14s %3d %c %6u %4d %5s %5s %6s %6s ;char szBuffer80;HDC hdc;ScrollWi ndowEx(hw nd, 0, -yChar, &rc,&rc,NULL,NULL,SW_INVALIDATE);hdc = GetDC (hw nd);SelectObject (hdc, GetStockObject

60、 (SYSTEM_FIXED_FONT);TextOut (hdc,xChar ,rc.bottom - yChar ,szBuffer ,wspri ntf szBuffer ,szFormatiType,szMessage, / 消息 wParam, / 虚拟键代码LOWORD (IParam), / 重复次数 HIWORD(lParam) & OxFF , / OEM /判断是否为增强键盘的扩展键(PSTR) (0 x01000000 & lParam :/判断是否同时使用了 ALT 键(PSTR) (0 x20000000 & lParam :(PSTR) (0 x40000000 & lParam :/判断前一次击键状(PSTR)(0 x80000000 & lParam ?/判断转换状态?);ReleaseDC (hw nd, hdc);ValidateRect (hw nd, NULL);/ 函数:WndProc/作用:处理主窗口的消息LRESULT CALLBACK WndProc (HWND hwn d, UINT iMsg

温馨提示

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

评论

0/150

提交评论