实验3API菜单使用.docx

上传人:b****4 文档编号:2960418 上传时间:2022-11-16 格式:DOCX 页数:11 大小:93.11KB
下载 相关 举报
实验3API菜单使用.docx_第1页
第1页 / 共11页
实验3API菜单使用.docx_第2页
第2页 / 共11页
实验3API菜单使用.docx_第3页
第3页 / 共11页
实验3API菜单使用.docx_第4页
第4页 / 共11页
实验3API菜单使用.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验3API菜单使用.docx

《实验3API菜单使用.docx》由会员分享,可在线阅读,更多相关《实验3API菜单使用.docx(11页珍藏版)》请在冰豆网上搜索。

实验3API菜单使用.docx

实验3API菜单使用

实验报告3

课程名称:

Windows编程实验名称:

API菜单使用

学生姓名:

班级:

学号:

成绩:

一、实验目的

掌握VC6中菜单的创建和使用。

二、实验内容

菜单的创建有三种方法:

1,在WINDOWCLASS中指定菜单资源的标识符;2,在CreateWindowEx函数参数中指定菜单句柄;3,先用LoadMenu函数载入菜单资源,再用SetMenu函数把菜单加载到应用程序的菜单栏。

菜单的操作包含:

向已存在菜单添加新的菜单项,删除菜单中的某一项,使菜单项呈现被选中状态,使菜单项无效,创建浮动式菜单,向Windows系统菜单中添加,删除选项等等。

三、实验要求

按下图建立一个创建菜单应用的程序框架。

要求:

(1)创建弹出式菜单

(2)显示相关信息

(3)向已有菜单中插入新项

(4)删除菜单中的选项

(5)设置菜单项为选中标志

(6)设置菜单项为单选标志

(7)向系统菜单中插入新项

四、实验步骤

(一)新建项目

使用VisualC++的应用程序向导生成一个应用程序MenuDemo。

项目类型选择“Win32Application”,在向导的第一步中将程序类型设置成“AsimpleWin32application”。

(二)编写实现菜单使用的代码

参考代码:

//test.cpp:

Definestheentrypointfortheapplication.

//

#defineWIN32_LEAN_AND_MEAN

#include"stdafx.h"

#include"resource.h"

#defineID_NEWITEM1013//定义新菜单项的标识符

#defineID_NEWSYSITEM60441//定义新系统菜单项标识符

LRESULTCALLBACKMainProc(HWND,UINT,WPARAM,LPARAM);

BOOLWINAPIDoDispPopupMenu(HWND,int,int);//创建弹出式菜单

VOIDWINAPIDoDispMessage(int);//显示相关信息

VOIDWINAPIDoInsertMenuItem(void);//向已有菜单中插入新项

VOIDWINAPIDoDeleteMenuItem(void);//删除菜单中的选项

VOIDWINAPIDoCheckMenuItem(void);//设置菜单项为选中标志

VOIDWINAPIDoCheckRadio(void);//设置菜单项为单选标志

VOIDWINAPIDoInsertSysMenu(void);//向系统菜单中插入新项

charszAppName[]="MenuDemo";

HINSTANCEhIns;

HWNDhMainWnd;

BOOLisInsert;//插入菜单标志

BOOLisCheck;//选中标志

intidRadio=2;//单选标志

intAPIENTRYWinMain(HINSTANCEhInstance,

HINSTANCEhPrevInstance,

LPSTRlpCmdLine,

intnCmdShow)

{MSGmsg;

HWNDhWnd;

WNDCLASSEXwc;

wc.cbClsExtra=0;

wc.cbSize=sizeof(WNDCLASSEX);

wc.cbWndExtra=0;

wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wc.hCursor=LoadCursor(NULL,IDC_ARROW);

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);

}returnmsg.wParam;

}

LRESULTCALLBACKMainProc(HWNDhWnd,UINTmessage,

WPARAMwParam,LPARAMlParam)

{HDChdc;

PAINTSTRUCTps;

switch(message)

{caseWM_CREATE:

return0;

caseWM_PAINT:

hdc=BeginPaint(hWnd,&ps);

EndPaint(hWnd,&ps);//dodrawing

return0;

caseWM_RBUTTONDOWN:

//鼠标在窗口中右键被按下时,弹出浮动式菜单

if(DoDispPopupMenu(hWnd,LOWORD(lParam),HIWORD(lParam)))

return0;//函数调用成功

else

break;//函数调用失败

caseWM_COMMAND:

switch(LOWORD(wParam))

{caseID_INSERT:

if(isInsert==0)

{DoInsertMenuItem();//插入新的菜单项

DoDispMessage(4);//显示相关信息

}break;

caseID_NEWITEM:

DoDispMessage(3);break;

caseID_DELETE:

if(isInsert!

=0)

{DoDeleteMenuItem();//删除菜单项

DoDispMessage(5);

}break;

caseIDEXIT:

PostQuitMessage(0);break;

caseID_CHECK:

//在菜单选项前打钩

DoCheckMenuItem();break;

caseID_RADIO1:

//在菜单选项前做一圆形标志,表明此项被选中,清除旧的标志

idRadio=2;

DoCheckRadio();break;

caseID_RADIO2:

//同上

idRadio=3;

DoCheckRadio();break;

caseID_RADIO3:

//同上

idRadio=4;

DoCheckRadio();break;

caseID_FLOAT1:

//浮动菜单的选项被选中时的处理

DoDispMessage(0);break;

caseID_FLOAT2:

//同上

DoDispMessage

(1);break;

caseID_FLOAT3:

//同上

DoDispMessage

(2);break;

}

return0;

caseWM_CLOSE:

PostQuitMessage(0);

return0;

}

returnDefWindowProc(hWnd,message,wParam,lParam);

}

BOOLWINAPIDoDispPopupMenu(HWNDhWnd,intx,inty)

{

HMENUhMenu;

HMENUhPopupMenu;

POINTpt={x,y};

//从资源文件中载入菜单资源

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)

returnFALSE;

//使用完毕,回收内存

DestroyMenu(hMenu);

returnTRUE;

}

VOIDWINAPIDoDispMessage(intid)

{HDChdc;//在菜单事件发生时,输出相应的字符串

char*mess[]={"CommandFloatingMenuitem1",

"CommandFloatingMenuitem2",

"CommandFloatingMenuitem3",

"CommandNewMenuItem",

"NewItemHaveBeenInserted",

"NewItemHaveBeenDeleted"};

InvalidateRect(hMainWnd,NULL,FALSE);

hdc=GetDC(hMainWnd);

TextOut(hdc,0,0,mess[id],strlen(mess[id]));

ReleaseDC(hMainWnd,hdc);

}

VOIDWINAPIDoInsertMenuItem()

{HMENUhMenu;//插入菜单项

HMENUhPopupMenu;

MENUITEMINFOinfo;

info.cbSize=sizeof(MENUITEMINFO);//每一个新插入的菜单项都必须填写MENUITEMINFO结构

info.fMask=MFT_STRING|MIIM_DATA|MIIM_ID|MIIM_TYPE;

info.fType=MFT_STRING;

info.fState=0;

info.wID=ID_NEWITEM;

info.hSubMenu=NULL;

info.hbmpChe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1