win32动态生成窗体菜单

本文介绍了一个使用C++编写的简单Windows程序,演示了如何创建窗口类、加载图标及构建菜单栏。程序通过调用Windows API实现了菜单项的添加与响应、图标的加载等操作。
#include "windows.h" #define ID_FILE_EXIT 9001 //定义菜单的id号 #define ID_STUFF_GO 9002 CONST char g_szClassName[]="myWindowsClass"; //定义窗口类的名称数组 LRESULT CALLBACK WndProc(HWND hwnd ,UINT msg,WPARAM wParam,LPARAM lParam) //消息处理程序 { switch(msg) //判断消息的类型 { case WM_CREATE: //程序新建时发生的消息 { HMENU hMenu,hSubMenu; //定义菜单和子菜单变理 HICON hIcon,hIconSm; //定义大图标和图标变量 hMenu=CreateMenu(); //新建菜单 hSubMenu=CreatePopupMenu(); //新键子菜单 AppendMenu(hSubMenu,MF_STRING,ID_FILE_EXIT,"E&xit"); //将子菜单追加到窗体 AppendMenu(hMenu,MF_STRING|MF_POPUP,(UINT)hSubMenu,"&File");//将主菜单追加到窗体 hSubMenu=CreatePopupMenu(); AppendMenu(hSubMenu,MF_STRING,ID_STUFF_GO,"&Go"); AppendMenu(hMenu,MF_STRING|MF_POPUP,(UINT)hSubMenu,"&Stuff"); SetMenu(hwnd,hMenu); //将菜单设置到那个窗口上 hIcon=(HICON)LoadImage(NULL,TEXT("金色光驱桌面图标.ico"),IMAGE_ICON,32,32,LR_LOADFROMFILE);//装入文件型大图标 if(hIcon) { SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon) ; } else { MessageBox(hwnd,TEXT("没有装入图标"),"error",MB_OK|MB_ICONERROR); } hIconSm=(HICON)LoadImage(NULL,"金色光驱桌面图标.ico",IMAGE_ICON,16,16,LR_LOADFROMFILE);//装入文件型小图标 if(hIconSm) { SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hIconSm); } else MessageBox(hwnd,"Could not load small icon!","Error",MB_OK|MB_ICONERROR); } break; case WM_LBUTTONDOWN: //右建单击窗体时发生的消息 { TCHAR szFilename[MAX_PATH]; HINSTANCE hInstance=GetModuleHandle(NULL); //得到应用程序的句柄 GetModuleFileName(hInstance,szFilename,MAX_PATH); //得到 应用程序的路径 MessageBox(hwnd,szFilename,TEXT("提示信息"),MB_OK|MB_ICONQUESTION); } case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,msg,wParam,lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) //WIN32入口 { WNDCLASSEX wc; //窗口类结构体变量 HWND hwnd; //句柄 变量 MSG Msg; //消息结构体 wc.cbSize=sizeof(WNDCLASSEX); //窗口类占用多不字节 wc.style=0; //窗口样式 wc.lpfnWndProc=WndProc; //窗口指向的消息处理程序 wc.cbClsExtra=0; //扩展占用 wc.cbWndExtra=0; //扩展占用 wc.hInstance = hInstance; // 初始化应用程序句柄。 wc.hIcon=NULL; // 初始化图标 wc.hCursor=LoadCursor(NULL,IDC_ARROW); //初始化光标 wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); // 窗口背景 wc.lpszMenuName=NULL; //窗口要引用的菜单 wc.lpszClassName=g_szClassName; //引用窗口类的名称 wc.hIconSm=NULL; //wc.hIconSm=(HICON)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_MYICON),IMAGE_ICON,16,16,0); if(!RegisterClassEx(&wc)) //向windows注册窗口类 { MessageBox(NULL,"WINDOWS REG ERROR","ERROR!",MB_ICONEXCLAMATION|MB_OK); return 0; } hwnd =CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, "the tite of my window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance,NULL ); //新键窗口,并将新建的窗口句柄初始化给应用程序 if (hwnd==NULL) { MessageBox(NULL,"window creation error","error",MB_ICONERROR|MB_OK); return 0; } ShowWindow(hwnd,nCmdShow); //显示窗口 UpdateWindow(hwnd); //更新窗口 while(GetMessage(&Msg,NULL,0,0)>0) //获取消息 { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值