轻松实现SINDOWS 98动态菜单

    技术2022-05-11  126

    轻松实现SINDOWS 98动态菜单


       在WINDOWS 98中,当你第一次使用动态菜单时,一定感到非常奇妙。其实在WINDOWS 98中,较容易动态地建立整个弹出式菜单,并可将其加到一个已存在的菜单中。首先,用API函数CreatePopMenu()建立菜单,函数原型如下:HMENU CreatePopupMenu(void);该函数建立一个空菜单并返回菜单句柄。建立菜单后,使用AppendMenu()来增加菜单项目。菜单构造完成后即可将其用AppendMenu()增加到已存在的菜单中。使用CreatePopupMenu()函数建立的菜单必须被废弃。若菜单连接到一个窗口,将自动废弃。当调用DeleteMenu()函数将菜单从父菜单中清除时,也将被废弃。动态菜单也可以通过调用DestroyMenu()函数废弃。本程序在中文版WINDOWS 98系统中,采用VISUAL C++ 6.0编译连接通过。运行后,若你多次点击文件菜但中的″增加菜单”子项目时,你一定会有惊奇的发现。附源程序DMENU.C、资源描述文件DMENU.RC和头文件DMENU.H。// Windows98 动态菜单源程序——dmenu.c#include<windows.h>#include<string.h>#include<stdio.h>#include″dmenu.h″LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);char *szWinName=″Win98Main″; //winclass nameint WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,PSTR pszCmdLine,int nCmdShow){HWND hwnd;MSG uMsg;WNDCLASS wndclass;HACCEL hAccel;// 定义窗口类wndclass.style=0; wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hInstance=hThisInst;wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName=″SampleMenu″;wndclass.lpszClassName=szWinName;//注册窗口类RegisterClass(&wndclass);//创建窗口hwnd=CreateWindow(szWinName,″Windows 98 动态菜单″,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,HWND_DESKTOP,NULL,hThisInst,NULL); //加载加速键表 hAccel=LoadAccelerators(hThisInst,″SampleMenu″);// 显示窗口ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);// 创建消息循环while(GetMessage(&uMsg,NULL,0,0)){if(!TranslateAccelerator(hwnd,hAccel,&uMsg))TranslateMessage(&uMsg);DispatchMessage(&uMsg);}}return uMsg.wParam;}//窗口函数处理各种消息,由WINDOWS系统调用LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){HMENU hmenu,hsubmenu,hpopup;int return_value;switch(message){ case WM_COMMAND:switch(LOWORD(wParam)){case IDM_EXIT:MessageBox(hwnd,″退出程序″,″退出″,MB_OK);PostQuitMessage(0);break;case IDM_ADDITEM://增加菜单hmenu=GetMenu(hwnd); //主菜单薄句柄hsubmenu=GetSubMenu(hmenu,0); //弹出式菜单句柄//创建新的弹出菜单hpopup=CreatePopupMenu();//添加新菜单项AppendMenu(hpopup,MF_ENABLED,IDM_NEW,″动态菜单1″);AppendMenu(hpopup,MF_ENABLED,IDM_NEW,″dynamic menu 2″);//把新菜单加到文件菜单中AppendMenu(hsubmenu,MF_SEPARATOR,0,″″);AppendMenu(hsubmenu,MF_POPUP,(UINT)hpopup,″动态菜单(&D)″);break; case IDM_ABOUT:MessageBox(hwnd,″Windows 98 动态菜单/n/n 2000.4.27/n/n计算机软件/n″,″关于″,MB_OK);break;}break;case WM_DESTROY:return_value=MessageBox(hwnd,″退出程序?″,″退出″,MB_OK);if(return_value=IDOK){PostQuitMessage(0);break;}default:return DefWindowProc(hwnd,message,wParam,lParam);}return 0;}资源描述文件DMENU.RC内容如下:#include<windows.h>#include″dmenu.h″SampleMenu MENU {POPUP ″文件(&F)″{MENUITEM ″退出(&x)/t ALT-x″,IDM_EXITMENUITEM ″添加菜单(&A)″,IDM_ADDITEM}MENUITEM″关于(&A)″,IDM_ABOUT}SampleMenu ACCELERATORS {″x″, IDM_EXIT, ALTVK-F1,IDM-ABOUT,VIRTKEY,ALT}头文件DMENU.H内容如下:#define IDM_EXIT 101#define IDM_ABOUT 102#define IDM_ADDITEM 103#define IDM_NEW 104 (安徽 王翌)


    最新回复(0)