实验3:API菜单使用剖析_第1页
实验3:API菜单使用剖析_第2页
实验3:API菜单使用剖析_第3页
实验3:API菜单使用剖析_第4页
实验3:API菜单使用剖析_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、实验报告3课程名称:Windows编程实验名称:API菜单使用学生姓名:班级:学号:成绩:、实验目的掌握VC6中菜单的创建和使用二、实验内容菜单的创建有三种方法:1,在WINDOWCLASS中指定菜单资源的标识符; 2,在CreateWindowEx函数参数中指定菜单句柄;3,先用LoadMenu函数载入 菜单资源,再用SetMenu函数把菜单加载到应用程序的菜单栏。菜单的操作包含:向已存在菜单添加新的菜单项,删除菜单中的某一项,使 菜单项呈现被选中状态,使菜单项无效,创建浮动式菜单,向 Windows系统菜 单中添加,删除选项等等。三、实验要求按下图建立一个创建菜单应用的程序框架要求:(1)

2、 创建弹出式菜单(2) 显示相关信息(3) 向已有菜单中插入新项(4) 删除菜单中的选项(5) 设置菜单项为选中标志(6) 设置菜单项为单选标志(7) 向系统菜单中插入新项四、实验步骤(一)新建项目使用Visual C+的应用程序向导生成一个应用程序 MenuDemo。项目类型选 择“Win32Application,在向导的第一步中将程序类型设置成“A simple Win32application”。(二)编写实现菜单使用的代码参考代码:/ test.cpp : Defines the entry point for the application./#define WIN32_LEAN_

3、AND_MEAN#include stdafx.h#include resource.h#define ID_NEWITEM1013#define ID_NEWSYSITEM60441/定义新菜单项的标识符/定义新系统菜单项标识符LRESULT CALLBACK MainProc(HWND,UINT,WPARAM,LPARAM);BOOL WINAPI DoDispPopupMenu(HWND,int,int);VOID WINAPI DoDispMessage(int);VOID WINAPI DoInsertMenuItem(void); VOID WINAPI DoDeleteMenuI

4、tem(void); VOID WINAPI DoCheckMenuItem(void);VOID WINAPI DoCheckRadio(void);VOID WINAPI DoInsertSysMenu(void);/创建弹出式菜单 /显示相关信息 /向已有菜单中插入新项 /删除菜单中的选项 /设置菜单项为选中标志 /设置菜单项为单选标志 /向系统菜单中插入新项char szAppName=MenuDemo;HINSTANCE hIns; HWND hMainWnd; BOOL isInsert; BOOL isCheck; int idRadio=2;/插入菜单标志/选中标志/单选标志i

5、nt APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) MSG msg;HWND hWnd; WNDCLASSEX wc;wc.cbClsExtrawc.cbSize wc.cbWndExtra=0;=sizeof(WNDCLASSEX);=0;wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hIconwc.hIconSmw

6、c.hInstancewc.lpfnWndProc wc.lpszClassName wc.lpszMenuName=LoadIcon(NULL,IDI_APPLICATION);=0;=hInstance;=(WNDPROC)MainProc;=szAppName;=MAKEINTRESOURCE(IDR_MENU1);wc.style =CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_OWNDC; RegisterClassEx(&wc);hWnd=CreateWindowEx(0,szAppName,szAppName,WS_OVERLAPPEDWIN

7、DOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL);hMainWnd=hWnd;hIns=hInstance;DoInsertSysMenu();/ 在此处向系统菜单中插入菜单项ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);while(GetMessage(&msg,NULL,0,0) TranslateMessage(&msg);DispatchMessage(&msg); return msg.wParam;LRESULT C

8、ALLBACK MainProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)HDC hdc;PAINTSTRUCT ps;switch(message)case WM_CREATE:return 0;case WM_PAINT:hdc=BeginPaint(hWnd,&ps);EndPaint(hWnd,&ps); /do drawingreturn 0;case WM_RBUTTONDOWN: / 鼠标在窗口中右键被按下时,弹出浮动式菜单 if(DoDispPopupMenu(hWnd,LOWORD(lParam),HIWORD(l

9、Param) return 0; /函数调用成功elsebreak;/函数调用失败case WM_COMMAND:switch(LOWORD(wParam) case ID_INSERT:if(isInsert=0) DoInsertMenuItem();/ 插入新的菜单项DoDispMessage(4); / 显示相关信息break;case ID_NEWITEM: DoDispMessage(3); break;case ID_DELETE:if(isInsert!=0) DoDeleteMenuItem();/ 删除菜单项 DoDispMessage(5);break;case IDEX

10、IT:PostQuitMessage(0); break;case ID_CHECK: /在菜单选项前打钩DoCheckMenuItem(); break;case ID_RADIO1: /在菜单选项前做一圆形标志,表明此项被选中,清除旧的标志 idRadio=2;DoCheckRadio(); break;case ID_RADIO2: /同上 idRadio=3; DoCheckRadio(); break;case ID_RADIO3: /同上 idRadio=4; DoCheckRadio(); break;case ID_FLOAT1: /浮动菜单的选项被选中时的处理 DoDispM

11、essage(0); break;case ID_FLOAT2: /同上DoDispMessage(1); break;case ID_FLOAT3: /同上DoDispMessage(2); break;return 0;case WM_CLOSE:PostQuitMessage(0);return 0;return DefWindowProc(hWnd,message,wParam,lParam);BOOL WINAPI DoDispPopupMenu(HWND hWnd,int x,int y)HMENU hMenu;HMENU hPopupMenu;POINT pt=x,y;/从资源文

12、件中载入菜单资源 hMenu=LoadMenu(hIns,MAKEINTRESOURCE(IDR_MENU2); /获得子菜单的句柄hPopupMenu=GetSubMenu(hMenu,0);/窗口坐标转化到屏幕坐标 ClientToScreen(hMainWnd,&pt);/创建浮动菜单 if(TrackPopupMenu(hPopupMenu,TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x,pt.y,0,hMainWnd,NULL)=FALSE)return FALSE;/使用完毕,回收内存DestroyMenu(hMenu);return TRUE;VOID

13、 WINAPI DoDispMessage(int id) HDC hdc;/ 在菜单事件发生时,输出相应的字符串char *mess=Command Floating Menuitem 1 ,Command Floating Menuitem 2 ,Command Floating Menuitem 3 , Command New Menu Item ,New Item Have Been Inserted ,New Item Have Been Deleted ; InvalidateRect(hMainWnd,NULL,FALSE); hdc=GetDC(hMainWnd);TextOu

14、t(hdc,0,0,messid,strlen(messid); ReleaseDC(hMainWnd,hdc);VOID WINAPI DoInsertMenuItem() HMENU hMenu; / 插入菜单项HMENU hPopupMenu;MENUITEMINFO info;info.cbSize=sizeof(MENUITEMINFO); / 每 一 个 新 插 入 的 菜 单 项 都 必 须 填 写 MENUITEMINFO 结构info.fMask info.fType info.fState info.wID info.hSubMenu=MFT_STRING | MIIM_D

15、ATA | MIIM_ID | MIIM_TYPE;=MFT_STRING;=0;=ID_NEWITEM;=NULL;info.hbmpChecked =NULL; info.hbmpUnchecked =NULL;info.dwItemData=ID_NEWITEM;info.dwTypeData=New Item;info.cch =8;hMenu=GetMenu(hMainWnd); / 获得已存在菜单的句柄 hPopupMenu=GetSubMenu(hMenu,0); / 获得子菜单的句柄 InsertMenuItem(hPopupMenu,1,TRUE,&info); / 插入菜单

16、项 isInsert=1; / 置插入标志为 1VOID WINAPI DoDeleteMenuItem() HMENU hMenu; / 删除菜单项 HMENU hPopupMenu; hMenu=GetMenu(hMainWnd); hPopupMenu=GetSubMenu(hMenu,0); RemoveMenu(hPopupMenu,ID_NEWITEM,MF_BYCOMMAND); isInsert=0;VOID WINAPI DoCheckMenuItem()/ 此函数先判断菜单项是否被打钩,若没有,则做打钩标记,若已有,则删除打钩标记 HMENU hMenu;HMENU hPo

17、pupMenu; hMenu=GetMenu(hMainWnd); hPopupMenu=GetSubMenu(hMenu,1); if(isCheck) CheckMenuItem(hPopupMenu,0,MF_BYPOSITION | MF_UNCHECKED); isCheck=0;else CheckMenuItem(hPopupMenu,0,MF_BYPOSITION | MF_CHECKED); isCheck=1;VOID WINAPI DoCheckRadio()HMENU hMenu;HMENU hPopupMenu; hMenu=GetMenu(hMainWnd); hP

18、opupMenu=GetSubMenu(hMenu,1);CheckMenuRadioItem(hPopupMenu,2,4,idRadio,MF_BYPOSITION);VOID WINAPI DoInsertSysMenu() HMENU hSysMenu; / 在系统菜单中插入菜单项 MENUITEMINFO info;hSysMenu=GetSystemMenu(hMainWnd,FALSE); / 获得系统菜单的句柄info.wIDinfo.hSubMenu=ID_NEWSYSITEM;=NULL;info.hbmpChecked =NULL;info.hbmpUnchecked i

19、nfo.dwItemData info.dwTypeData=NULL;=15;=New system Item;info.cch =15;InsertMenuItem(hSysMenu,6,TRUE,&info);info.cbSize info.fMask info.fType info.fState=sizeof(MENUITEMINFO);=MFT_STRING | MIIM_DATA | MIIM_ID | MIIM_TYPE; =MFT_STRING;=MFS_DEFAULT;(三)编写如下资源文件( Script1.rc)#include resource.hIDR_MENU1

20、MENU DISCARDABLEBEGINPOPUP Menu&1BEGINMENUITEM InsertItemtI,ID_INSERTMENUITEM DeleteItemtD,ID_DELETEMENUITEM &ExittAlt+F4,IDEXITENDPOPUP Menu&2BEGINMENUITEM CheckText,ID_CHECKMENUITEM SEPARATORMENUITEM Radio1,ID_RADIO1MENUITEM Radio2,ID_RADIO2MENUITEM Radio3,ID_RADIO3MENUITEM SEPARATORMENUITEM About,ID_ABOUTENDENDIDR_MENU2 MENU DISCARDABLEBEGINPOPUP TestBEGINMENUITEM Floating Menu Item1,ID_FLOAT1, MENUBREAKMENUITEM Floating Menu Item2,ID_FLOAT2MENUITEM

温馨提示

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

最新文档

评论

0/150

提交评论