教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 资料大全 >

实验3:API菜单使用

来源:网络收集 时间:2026-01-21
导读: windows编程实验3:API菜单使用 实验报告3 课程名称: Windows编程 实验名称: API菜单使用 学生姓名: 班级: 学号: 成绩: 一、 实验目的 掌握VC6中菜单的创建和使用。 二、 实验内容 菜单的创建有三种方法:1,在WINDOWCLASS中指定菜单资源的标识符;2,

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字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验3:API菜单使用.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/2193853.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)