实验3:API菜单使用
windows编程实验3:API菜单使用
实验报告3
课程名称: Windows编程 实验名称: API菜单使用 学生姓名: 班级: 学号: 成绩:
一、 实验目的
掌握VC6中菜单的创建和使用。
二、 实验内容
菜单的创建有三种方法:1,在WINDOWCLASS中指定菜单资源的标识符;2,在CreateWindowEx函数参数中指定菜单句柄;3,先用LoadMenu函数载入菜单资源,再用SetMenu函数把菜单加载到应用程序的菜单栏。
菜单的操作包含:向已存在菜单添加新的菜单项,删除菜单中的某一项,使菜单项呈现被选中状态,使菜单项无效,创建浮动式菜单,向Windows系统菜单中添加,删除选项等等。
三、 实验要求
按下图建立一个创建菜单应用的程序框架。
要求:
(1) 创建弹出式菜单 (2) 显示相关信息
(3) 向已有菜单中插入新项 (4) 删除菜单中的选项
windows编程实验3:API菜单使用
(5) 设置菜单项为选中标志 (6) 设置菜单项为单选标志 (7) 向系统菜单中插入新项
四、 实验步骤
(一)新建项目
使用Visual C++的应用程序向导生成一个应用程序MenuDemo。项目类型选择“Win32 Application”,在向导的第一步中将程序类型设置成“A simple Win32 application”。
(二)编写实现菜单使用的代码
参考代码:
// test.cpp : Defines the entry point for the application. //
#define WIN32_LEAN_AND_MEAN #include "stdafx.h" #include "resource.h"
#define ID_NEWITEM 1013 //定义新菜单项的标识符 #define ID_NEWSYSITEM 60441 //定义新系统菜单项标识符 LRESULT CALLBACK MainProc(HWND,UINT,WPARAM,LPARAM); BOOL WINAPI DoDispPopupMenu(HWND,int,int); //创建弹出式菜单 VOID WINAPI DoDispMessage(int); //显示相关信息 VOID WINAPI DoInsertMenuItem(void); //向已有菜单中插入新项 VOID WINAPI DoDeleteMenuItem(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; //单选标志
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {MSG msg; HWND hWnd;
WNDCLASSEX wc; wc.cbClsExtra =0; wc.cbSize =sizeof(WNDCLASSEX); wc.cbWndExtra =0; wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor =LoadCursor(NULL,IDC_ARROW);
windows编程实验3:API菜单使用
wc.hIcon =LoadIcon(NULL,IDI_APPLICATION); wc.hIconSm =0; wc.hInstance =hInstance; wc.lpfnWndProc =(WNDPROC)MainProc; wc.lpszClassName =szAppName; wc.lpszMenuName =MAKEINTRESOURCE(IDR_MENU1); wc.style =CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_OWNDC; RegisterClassEx(&wc);
hWnd=CreateWindowEx(0,szAppName,szAppName,WS_OVERLAPPEDWINDOW, 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 CALLBACK 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 drawing return 0;
case WM_RBUTTONDOWN: //鼠标在窗口中右键被按下时,弹出浮动式菜单 if(DoDispPopupMenu(hWnd,LOWORD(lParam),HIWORD(lParam))) return 0; //函数调用成功 else break; //函数调用失败 case WM_COMMAND: switch(LOWORD(wParam)) { case ID_INSERT: if(isInsert==0) { DoInsertMenuItem();//插入新的菜单项 DoDispMessage(4); //显示相关信息
windows编程实验3:API菜单使用
}break; case ID_NEWITEM: DoDispMessage(3); break; case ID_DELETE: if(isInsert!=0) { DoDeleteMenuItem();//删除菜单项 DoDispMessage(5); }break; case IDEXIT: 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: //浮动菜单的选项被选中时的处理 DoDispMessage(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};
//从资源文件中载入菜单资源
hMenu=LoadMenu(hIns,MAKEINTRESOURCE(IDR_MENU2)); //获得子菜单的句柄
hPopupMenu=GetSubMenu(hMenu,0);
windows编程实验3:API菜单使用
//窗口坐标转化到屏幕坐标 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 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);
TextOut(hdc,0,0,mess[id],strlen(mess[id])); ReleaseDC(hMainWnd,hdc); }
VOID WINAPI DoInsertMenuItem() { HMENU hMenu; //插入菜单项 HMENU hPopupMenu; …… 此处隐藏:5559字,全部文档内容请下载后查看。喜欢就下载吧 ……
- 基于PLC控制的航空电镀生产线自动输送
- 中考预测课内外文言文对比阅读2
- 2018-2023年中国商业智能(BI)产业市场
- 中国金融体制改革研究2011new
- 外窗淋水试验方案
- 精益生产(Lean Production)
- 学校安全事故处置和信息报送制度
- Chapter 5 Human Resources Management
- 【小学数学】人教版小学六年级上册数学
- 初中数学解题方法与技巧
- 山东省创伤中心建设与管理指导原则(试
- 函数与数列的极限的强化练习题答案
- 10分钟淋巴按摩消脂
- 网络应急演练预案
- 服装设计入门基础知识
- 初二数学分式计算题练习
- (人教新课标)高二数学必修5第二章 数列
- 最新自主创业项目
- 北京大学 无机化学课件 4第4章 配合物
- 贸易公司业务管理制度




