《可视化实验二实现Windows应用程序对键盘与鼠标的响应(共7页).doc》由会员分享,可在线阅读,更多相关《可视化实验二实现Windows应用程序对键盘与鼠标的响应(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上Visual C+面向对象与可视化程序设计实验二实验报告专心-专注-专业一、实验目的1、使用API函数编制包含各种资源的Windows应用程序; 2、实现Windows应用程序对键盘与鼠标的响应。二、实验内容1、问题描述:(1)创建一个菜单,其中有三个菜单项,分别为“文件”、“计算”和“帮助”,其中,“文件”菜单项包含“打开”、“保存”、“画图”、“退出”等菜单选项;“计算”菜单包含“总和”、“方差”、“均方根”等菜单选项;“帮助”菜单项包含“计算总和帮助”、“计算方差帮助”和“计算均方根帮助”以及“关于”等项 。(2)若单击“画图”菜单项,则绘出P103图形。若在用
2、户区内按下鼠标左键,则动态创建一个包括“删除计算总和”、“添加计算平均值”和“修改计算均方差”三个菜单项的弹出式菜单,由此菜单控制“计算”菜单中菜单项删除、添加与修改。(要求新的弹出式菜单开始时不可用,按下右键后变为可用。) 单击“修改计算均方差”菜单项后,“计算”菜单下的“计算均方差”项改为“线性拟合”,单击“添加计算平均值”菜单项后,“计算”菜单中添加上了“计算平均值”菜单项 。 (3)将光标设定为自己名字中的某个字、图标设定为自己名字中的另一个字。 2、应用程序中所用到的资源、消息,简介主要函数的功能;3、程序实现 4、操作结果三、程序代码#includewindows.h#includ
3、eE叶孙晓.hHMENU hmenu,haddmenu;LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) HWND hwnd; MSG Msg; HACCEL hAccel; WNDCLASS wndclass; char lpszMenuName=Menu; char lpszClassName=菜单; char lpszTitle=E叶孙晓二; wndclass
4、.style=0; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=lpszMenuName; wndclass.lpszClassName=lpszClassName; if(!RegisterClass(&wndclass) MessageBeep(0); retur
5、n FALSE; hwnd=CreateWindow( lpszClassName, lpszTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); hAccel=LoadAccelerators(hInstance,lpszMenuName); while(GetMessage(&Msg,NULL,0,0) if(!Tr
6、anslateAccelerator(hwnd,hAccel,&Msg) TranslateMessage(&Msg); DispatchMessage(&Msg); return Msg.wParam; LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) static bool draw = false; static bool pingjunzhiadd = true; static bool left = true; HDC hdc; PAINTSTRUCT ps; HPEN hp; H
7、BRUSH hb; switch(message) case WM_COMMAND: switch(LOWORD(wParam) case IDM_EXIT: SendMessage(hwnd,WM_DESTROY,0,0); break; case IDM_fangchamodify: ModifyMenu(hmenu,IDM_fangcha,MF_BYCOMMAND,IDM_nihe,线性拟合); DrawMenuBar(hwnd); break; case IDM_pingjunzhiadd: if(pingjunzhiadd) InsertMenu(hmenu,IDM_junfangg
8、en,MF_BYCOMMAND|MF_ENABLED,IDM_pingjunzhi,平均值); DrawMenuBar(hwnd); pingjunzhiadd = false; break; case IDM_DRAW: hmenu = GetMenu(hwnd); draw = true; break; break; case WM_LBUTTONDOWN: if(left) hmenu=GetMenu(hwnd); haddmenu=CreateMenu(); AppendMenu(haddmenu,MF_GRAYED,IDM_zonghedelete,删除计算总和); AppendMe
9、nu(haddmenu,MF_GRAYED,IDM_fangchamodify,修改计算方差); AppendMenu(haddmenu,MF_GRAYED,IDM_pingjunzhiadd,添加计算平均值); InsertMenu(hmenu,3,MF_POPUP|MF_BYPOSITION,(UINT)haddmenu,修改菜单); DrawMenuBar(hwnd); left = false; break; case WM_RBUTTONDOWN: EnableMenuItem(haddmenu,IDM_zonghedelete,MF_ENABLED); EnableMenuItem
10、(haddmenu,IDM_fangchamodify,MF_ENABLED); EnableMenuItem(haddmenu,IDM_pingjunzhiadd,MF_ENABLED); DrawMenuBar(hwnd); break; case WM_PAINT: if(draw) hdc = BeginPaint (hwnd, &ps); SetMapMode(hdc,MM_TEXT); Rectangle(hdc,130,60,270,200); hb=CreateHatchBrush(HS_CROSS,RGB(255,0,0); SelectObject(hdc,hb); Ell
11、ipse(hdc,130,70,270,190); hp=CreatePen(PS_DASHDOT,1,RGB(0,255,0); SelectObject(hdc,hp); MoveToEx(hdc,100,130,NULL); LineTo(hdc,300,130); MoveToEx(hdc,200,30,NULL); LineTo(hdc,200,230); EndPaint(hwnd,&ps); DeleteObject(hp); DeleteObject(hb); break; case WM_DESTROY: PostQuitMessage(0); break; default:
12、 return DefWindowProc(hwnd,message,wParam,lParam); return 0; 头文件#define IDM_ADDMENU 14#define IDM_DELMENU 16#define IDM_OPEN 11#define IDM_SAVE 13#define IDM_lcw 17#define IDM_DRAW 12#define IDM_EXIT 15 #define IDM_zonghe 18 #define IDM_fangcha 19 #define IDM_junfanggen 21 #define IDM_zonghehelp 22
13、#define IDM_fangchahelp 23 #define IDM_junfanggenhelp 24 #define IDM_ABOUT 20#define IDM_zonghedelete 30#define IDM_fangchamodify 31#define IDM_pingjunzhiadd 32#define IDM_nihe 33#define IDM_pingjunzhi 34 资源文件/Microsoft Developer Studio generated resource script./#include resource.h#define APSTUDIO_
14、READONLY_SYMBOLS/ Generated from the TEXTINCLUDE 2 resource./#include afxres.h#includewindows.h#includeE叶孙晓.hE ICON D:E二E.ICOE CURSOR D:E二E.CURMenu MENU DISCARDABLE POPUP文件(&F) MENUITEM打开(&O)tCtrl+O, IDM_OPEN MENUITEM画图(&G), IDM_DRAW MENUITEM保存(&S), IDM_SAVE MENUITEM另存为(&A), IDM_lcw MENUITEM SEPARAT
15、OR MENUITEM退出(&X), IDM_EXIT POPUP计算(&C) MENUITEM计算总和(&S), IDM_zonghe MENUITEM计算方差(&D), IDM_fangcha MENUITEM线性拟合, IDM_junfanggen POPUP帮助(&H) MENUITEM计算总和的帮助, IDM_zonghehelp MENUITEM计算方差的帮助, IDM_fangchahelp MENUITEM计算均方根的帮助, IDM_junfanggenhelp MENUITEM SEPARATOR MENUITEM关于(&A), IDM_ABOUT /#undef APSTU
16、DIO_READONLY_SYMBOLS/ Chinese (中国) resources#if !defined(AFX_RESOURCE_DLL) | defined(AFX_TARG_CHS)#ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#pragma code_page(936)#endif /_WIN32#ifdef APSTUDIO_INVOKED/ TEXTINCLUDE/1 TEXTINCLUDE DISCARDABLE BEGIN resource.h0END2 TEXTINCLUDE DISCARD
17、ABLE BEGIN #include afxres.hrn #includewindows.hrn #includeE叶孙晓.hrn E ICON D:E二E.ICOrn E CURSOR D:E二E.CURrn Menu MENU DISCARDABLErn rn POPUP文件(&F)rn rn MENUITEM打开(&O)tCtrl+O, IDM_OPEN rn MENUITEM画图(&G), IDM_DRAW rn MENUITEM保存(&S), IDM_SAVE MENUITEM另存为(&A), IDM_lcw MENUITEM SEPARATORrn MENUITEM退出(&X)
18、, IDM_EXITrn rn rn POPUP计算(&C)rn rn MENUITEM计算总和(&S), IDM_zonghe rn MENUITEM计算方差(&D), IDM_fangcharn MENUITEM线性拟合, IDM_junfanggenrn rn rn POPUP帮助(&H)rn rn MENUITEM计算总和的帮助, IDM_zonghehelprn MENUITEM计算方差的帮助, IDM_fangchahelprn MENUITEM计算均方根的帮助, IDM_junfanggenhelprn MENUITEM SEPARATORrn MENUITEM关于(&A), I
19、DM_ABOUTrn 0END3 TEXTINCLUDE DISCARDABLE BEGIN rn 0END#endif / APSTUDIO_INVOKED#endif / Chinese (中国) resources/#ifndef APSTUDIO_INVOKED/ Generated from the TEXTINCLUDE 3 resource./#endif 五、实验心得通过这次实验学会了使用API函数编制包含各种资源的Windows应用程序,在实验过程中,光标的设置,课本上对这块阐述的很简短,很多都需要自己去理解。调用自己命名光标这个函数。wndclass.hCursor=LoadCursor(GetModuleHandle(NULL),E); /窗口采用光标