windows程序設(shè)計實驗報告解析_第1頁
windows程序設(shè)計實驗報告解析_第2頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、四川師范大學(xué)計科學(xué)院實驗報告冊院系名稱:計算機科學(xué)學(xué)院課程名稱:Windows程序設(shè)計實驗學(xué)期2013年至2014年 第一學(xué)期專業(yè)班級:軟件工程12級4班姓名:何定宇學(xué)號:2012110409指導(dǎo)教師:馮朝勝實驗最終成績:實驗報告須知1學(xué)生填寫實驗報告應(yīng)按規(guī)范填寫,填寫格式見由任課老師給出的 實驗報告樣本;2學(xué)生應(yīng)填寫的內(nèi)容包括:封面相關(guān)欄目、第一頁中 本學(xué)期(年) 開設(shè)實驗課程情況一覽表 中的實驗名稱、 學(xué)時數(shù);每次報告中的實 驗性質(zhì)、同組人姓名、實驗日期、以及實驗報告中的一至五項;3教師填寫內(nèi)容為:實驗評價、每次報告成績、第一頁中本學(xué)期(年)開設(shè)實驗課程情況一覽表中 成績、及封面的實驗最終

2、成績;4學(xué)生實驗結(jié)束后,教師應(yīng)對學(xué)生實驗結(jié)果進行核實,學(xué)生方可離 開實驗室。5、實驗成績等級分為(90100分)優(yōu),(8089分)良,(70-79分)中,(6069分)及格,(59分)不及格。6本實驗冊應(yīng)妥善保管,本課程實驗結(jié)束后應(yīng)交回實驗室本學(xué)期(年)開設(shè)實驗課程情況一覽表序號實驗名稱(學(xué)生實驗后填寫)學(xué)時數(shù)成績(分數(shù)或等級)1Visual C+ 6.0 開發(fā)環(huán)境實驗2Windows 應(yīng)用程序基本框架頭驗3Windows 繪圖試驗4文本的輸出方法與子體設(shè)置實驗5鍵盤消息的響應(yīng)實驗6鼠標消息的響應(yīng)實驗7資源在 Windows 編程中的應(yīng)用實驗8控件 API 編程9在 MFC 中創(chuàng)建應(yīng)用程序資源

3、10單文檔與多文檔11綜合性實驗121314151617181920實驗報告(一)實驗名稱Visual C+6.0 開發(fā)環(huán)境實驗同組人姓名實驗性質(zhì)基本操作驗證性綜合性設(shè)計性實驗日期實驗成績教師評價:實驗預(yù)習(xí)口 實驗操作口 實驗結(jié)果口 實驗報告口 其它口教師簽名:、實驗?zāi)康募耙罅私?Visual C+6.0 的特點,熟悉 Visual C+6.0 的開發(fā)環(huán)境。二、實驗內(nèi)容了解和熟悉開發(fā)環(huán)境,對各種菜單功能,工程文件管理和MSDN 幫助功能有完整的了、主要設(shè)備及軟件Win dows 2000+VC 6.0+MSDN四、實驗流程、操作步驟或核心代碼、算法片段五、實驗結(jié)果的分析與評價實驗報告(二)實

4、驗名稱Windows 應(yīng)用程序基本框架頭驗同組人姓名實驗性質(zhì)基本操作驗證性綜合性設(shè)計性實驗日期實驗成績教師評價:實驗預(yù)習(xí)口 實驗操作口 實驗結(jié)果口 實驗報告口 其它口教師簽名:一、實驗?zāi)康募耙缶帉懙谝粋€ Win dows 程序,理解入口函數(shù) Winm ai n 和窗口函數(shù) Win Proc,掌握消息驅(qū)動機 制。二、實驗內(nèi)容使用 Win32 Applicatio n 模板建立一個 Win32 工程,編寫一個包含WinM ai n. Win Proc 的基本W(wǎng)indows 程序,并編譯、運行,觀察結(jié)果。、主要設(shè)備及軟件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;五、實驗結(jié)果的分析與評價實驗報告(三)實驗名稱Windows 繪圖試驗同組人姓名實驗性質(zhì)基本操作驗證性綜合性設(shè)計性實驗日期實驗成績教師評價:實驗預(yù)習(xí)口實驗操作口實驗結(jié)果口實驗報告口其它口教師簽名:一、實驗?zāi)康募耙罄斫?DC 概念,掌握坐標映射的設(shè)置方法,熟悉Windows 繪圖的基本方法和函數(shù)。二、實驗內(nèi)容運用 Window

17、s 提供的 GDI 函數(shù),完成窗口圖形輸出功能。、主要設(shè)備及軟件Win dows 2000+VC 6.0+MSDN四、實驗流程、操作步驟或核心代碼、算法片段1)將窗口劃分為 5 個區(qū)域,并用白色到黑色線性變化的顏色填充這5 個區(qū)域,畫一條斜線穿過這 5 個區(qū)域;#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)編寫一個程序,在屏幕上出現(xiàn)一個圓心沿正弦曲線軌跡移動的實心圓,而且

24、,每隔四 分之一周期,圓的填充色和圓的周邊顏色都發(fā)生變化,同時,圓的半徑在四分之一周期之內(nèi)由 正弦曲線幅值的 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; / 定義窗口處理函數(shù)wn dclass.style=0;if(!RegisterClass( &wndclass) /如果注冊失敗則發(fā)出警告 MessageBeep(0)return FALSE /- 創(chuàng)建窗口 -hwn d=CreateWi ndow(SIN,qwer,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NU

27、LL,lpszCmdL in e,intNULL,hln sta nee, /創(chuàng)建此窗口的應(yīng)用程序的當(dāng)前句柄NULL);/-顯示窗口ShowWi ndow( hwnd, n CmdShow)/- 繪制用戶區(qū)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; /消息循環(huán)結(jié)束即程序終止時將信息返回系統(tǒng)long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wPara m, LONG lParam) HDC hDC;/定義指向設(shè)備的句柄HBRUSH hBrush; /定義指向畫刷的句柄HPEN hPe n; /定義指向畫筆的句柄PAINTSTRUCT PtStr;/定義指向包含繪圖信息的結(jié)構(gòu)體變量switch(iMessage) / 處理消息case WM_PAINT: /處理繪圖消息hDC=Be

29、gi nPai nt(hWnd,&PtStr);SetWi ndowOrgEx(hDC,-200,-200,NULL); / 設(shè)置映像模式 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 刪除設(shè)備環(huán)境指針Sleep(IOO); II 停 0.1 秒if(i100) InvalidateRect(hWnd,NULL,1);刷新用戶區(qū)return 0;case WM_DESTROY

33、:關(guān)閉窗口PostQuitMessage(O);return 0;default:retur n( DefWi ndowProc(hWnd,iMessage,wParam,IParam);五、實驗結(jié)果的分析與評價實驗報告(四)實驗名稱文本的輸出方法與子體設(shè)置同組人姓名實驗性質(zhì)基本操作驗證性綜合性設(shè)計性實驗日期實驗成績教師評價:實驗預(yù)習(xí)口 實驗操作口 實驗結(jié)果口 實驗報告口 其它口教師簽名:、實驗?zāi)康募耙罄斫庾煮w句柄的念,熟悉Windows 文字輸出的基本方法和函數(shù),學(xué)習(xí)字體格式的控制。二、實驗內(nèi)容(選做 1 個)1、 在窗口中顯示出 26 個英文字母,從左向右字母依次位置提高10 個像素單位

34、,并且顏色變?yōu)榧t色,然后回到正常位置;當(dāng)?shù)竭_最右端后改變方向從右向左依次變成紅色并位置提高10個像素單位。在窗口的第二行顯示26 個字母,字體從正常到斜體,顏色從黑色到天藍色不斷變換。2、 編寫一個程序,在窗口中顯示“VC 中顯示字體與背景”,字體顏色為紅色,背景色為黃 色,字體為宋體,字高 40。、主要設(shè)備及軟件四、實驗流程、操作步驟或核心代碼、算法片段1 )在窗口中顯示出26 個英文字母,從左向右字母依次位置提高10 個像素單位,并且顏色變?yōu)榧t色,然后回到正常位置;當(dāng)?shù)竭_最右端后改變方向從右向左依次變成紅色并位置提高 10 個像素單位。在窗口的第二行顯示26 個字母,字體從正常到斜體,顏色

35、從黑色到天藍色不斷變換。#in elude #in elude #i nclude #i nclude int a=0;/函數(shù)提前聲明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;/設(shè)置環(huán)境句柄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 結(jié)構(gòu)中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); / 設(shè)置單個的顏色為紅TextOut(hdc,2*i*tm.tmAveCharWidth,y,

40、&stri,1); 依次為字符串起始坐標,所顯示的字符串,輸出的字節(jié)數(shù)SetTextColor(hdc,RGB(0,0,0); / 設(shè)置整排的顏色為黑if (n %2=0)/當(dāng)時鐘為偶數(shù)時顯示黑色字體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/獲取當(dāng)前窗口可用區(qū)/對該區(qū)域進行刷新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;五、實驗結(jié)果的分析與評價a b c d efg h i j k I mn opqr s t u v wx y zabcdefghijklmnopqrstuvwxyz麗宇悻顯示實例程序?qū)嶒瀳蟾妫ㄎ澹嶒灻Q鍵盤消息的響應(yīng)實驗同組人姓名實驗性質(zhì)基本操作驗證性綜合性設(shè)計性實驗日期實驗成績教師評價:實驗預(yù)習(xí)口實驗操作口實驗結(jié)果口實驗報告口其它口教師簽名:一、實驗?zāi)康募耙罄斫?Windows

46、 程序響應(yīng)鍵盤操作的原理,熟悉鍵盤消息的響應(yīng)編程。二、實驗內(nèi)容(選做 1 個)1)設(shè)計一個窗口,在該窗口中練習(xí)鍵盤的響應(yīng),要求如下:單擊鍵盤上的向上箭頭時,窗口 中顯示 “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、一個按鍵后,在窗口依次顯示出:按鍵消息,參數(shù)wParam 的值;若為字符消息還要顯示相應(yīng)得字符;重復(fù)計位數(shù);OEM 掃描碼;擴展按鍵標志;ALT 按下狀態(tài);按鍵的先前狀態(tài);轉(zhuǎn)換狀態(tài)。測試:依次按下Ctrl,Shift,Alt,a,b, “向上箭頭鍵”,“向右箭頭鍵”和 Ctrl.、主要設(shè)備及軟件Win dows 2000+VC 6.0+MSDN四、實驗流程、操作步驟或核心代碼、算法片段1)設(shè)計一個窗口,在該窗口中練習(xí)鍵盤的響應(yīng),要求如下:單擊鍵盤上的向上箭頭時,窗口 中顯示 “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;定義設(shè)備環(huán)境句柄PAINTSTRUCT ps;HPEN hPe n;/定義包含繪圖信息的結(jié)構(gòu)體變量/定義畫筆句柄。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:/當(dāng)按上箭頭鍵時,變量置為真。nU pKeyDow n = TRUE; break;case VK_SHIFT:當(dāng)按 shift 鍵時,變量置為真。n ShiftKeyDow n = TRUE; break;case VK_CONTROL:/當(dāng)按 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);當(dāng)按下 b 鍵時 if(n ShiftKeyDow n =TRUE)檢查 shift 鍵是否處于按下狀態(tài)。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);創(chuàng)建 白畫刷。hPe n = (HPEN)GetStockObject(WHITE_PEN);/創(chuàng)建白畫筆。SelectObject(hDC,hPen);選入白畫刷 選入白畫筆II 設(shè)置字體顏色為紅色。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、編寫一個鍵盤消息處理程序,單擊一個按鍵后,在窗口依次顯示出:按鍵消息,參數(shù) wParam 的值;若為字符消息還要顯示相應(yīng)得字符;重復(fù)計位數(shù);OEM 掃描碼;擴展按鍵標志;ALT 按下狀態(tài);按鍵的先前狀態(tài);轉(zhuǎn)換狀態(tài)。測試:依次按下Ctrl,Shift,Alt,a,b, “向上箭頭鍵”,“向右箭頭鍵”和 Ctrl.#in clude #i nclude /全局變量RECT rc; /記錄滾屏的矩形區(qū)域int xChar , yChar; / 文本輸入點坐標WNDCLASSEX wn d;

57、/窗口類結(jié)構(gòu)變量char szAppName=鍵盤消息監(jiān)視程序 ;/ 窗口類名/函數(shù)聲明LRESULT CALLBACK WndProc(HWND, UINT , WPARAM, LPARAM);BOOL MyRegisterClass(HINSTANCE hln sta nee);BOOL Initln sta nce(HINSTANCE hln sta nce,i nt iCmdShow);/ 函數(shù):WinMain/作用:入口函數(shù)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;/ 函數(shù):ShowKey/作用:實現(xiàn)在窗口中顯示按鍵信息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), / 重復(fù)次數(shù) HIWORD(lParam) & OxFF , / OEM /判斷是否為增強鍵盤的擴展鍵(PSTR) (0 x01000000 & lParam :/判斷是否同時使用了 ALT 鍵(PSTR) (0 x20000000 & lParam :(PSTR) (0 x40000000 & lParam :/判斷前一次擊鍵狀(PSTR)(0 x80000000 & lParam ?/判斷轉(zhuǎn)換狀態(tài)?);ReleaseDC (hw nd, hdc);ValidateRect (hw nd, NULL);/ 函數(shù):WndProc/作用:處理主窗口的消息LRESULT CALLBACK WndProc (HWND hwn d, UINT iMsg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論