Windows菜单的创建
2015-06-10 21:40
190 查看
1.创建一个Win32的空工程,然后添加一个主文件Source.cpp:
2.添加一个头文件Header.h文件;
3.添加一个资源文件Resource.rc,然后右击.rc文件用C++代码编辑器打开,将自动生成的代码全部删掉,输入以下内容:
运行结果如下:
可以测试,快捷键都是可以使用的。
来自清华大学MOOC课件
#include "windows.h" #include "Header.h" #include "tchar.h" HMENU hmenu, haddmenu; //定义菜单句柄 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) { HWND hwnd; MSG Msg; HACCEL hAccel; WNDCLASS wndclass; //char lpszMenuName[] ="Menu"; wchar_t lpszMenuName[] = L"Menu"; //char lpszClassName[] = "菜单"; wchar_t lpszClassName[] = L"菜单"; //char lpszTitle[] = "My_Menu_Example"; wchar_t lpszTitle[] = L"My_Menu_Example"; wndclass.style = 0; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = lpszMenuName; //加载窗口类菜单 wndclass.lpszClassName = lpszClassName; if (!RegisterClass(&wndclass)) { MessageBeep(0); return FALSE; } hwnd = CreateWindow(lpszClassName, lpszTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); //加载加速键资源 hAccel = LoadAccelerators(hInstance, lpszMenuName); while (GetMessage(&Msg, NULL, 0, 0)) { //在消息循环中截获加速键消息 if (!TranslateAccelerator(hwnd, hAccel, &Msg)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } return Msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { //处理菜单消息 case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_ADDMENU: //在主菜单中添加弹出式统计计算菜单 hmenu = GetMenu(hwnd); //获取主菜单句柄 haddmenu = CreateMenu(); //动态创建菜单 //在创建的菜单中增加菜单项 AppendMenu(haddmenu, MF_ENABLED, IDM_qiuhe, L"求和"); AppendMenu(haddmenu, MF_ENABLED, IDM_fangcha, L"方差"); AppendMenu(haddmenu, MF_ENABLED, IDM_pinjunzhi, L"平均值"); AppendMenu(haddmenu, MF_ENABLED, IDM_junfanggen, L"均方根"); //将创建的弹出式菜单插入主菜单中 InsertMenu(hmenu, 2, MF_POPUP | MF_BYPOSITION, (UINT)haddmenu, L"统计计算(&C)"); //相应改变菜单中有关绘图统计计算菜单项的属性 EnableMenuItem(hmenu, IDM_ADDMENU, MF_GRAYED); EnableMenuItem(hmenu, IDM_DELMENU, MF_ENABLED); DrawMenuBar(hwnd); //重新显示窗口菜单 break; case IDM_DELMENU: //从主菜单中删除弹出式统计计算菜单 DeleteMenu(hmenu, 2, MF_BYPOSITION); //删除统计计算菜单项 EnableMenuItem(hmenu, IDM_ADDMENU, MF_ENABLED); //相应改变“文件”菜单中有关统计计算菜单项的属性 EnableMenuItem(hmenu, IDM_DELMENU, MF_GRAYED); DrawMenuBar(hwnd); //重新显示窗口菜单 break; case IDM_EXIT: SendMessage(hwnd, WM_DESTROY, 0, 0); //选择“退出”菜单项时,向应用程序发出WM_DESTROY消息 break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
2.添加一个头文件Header.h文件;
#define IDM_ADDMENU 15 #define IDM_DELMENU 16 #define IDM_EXIT 17 #define IDM_HELP 22 #define IDM_qiuhe 23 #define IDM_fangcha 24 #define IDM_pinjunzhi 25 #define IDM_junfanggen 26
3.添加一个资源文件Resource.rc,然后右击.rc文件用C++代码编辑器打开,将自动生成的代码全部删掉,输入以下内容:
#include "Header.h" #include "windows.h" MENU MENU DISCARDABLE BEGIN POPUP "文件(&F)" BEGIN MENUITEM "创建统计计算菜单项(&P)\t Ctrl+P", IDM_ADDMENU MENUITEM "删除统计计算菜单项(&D)\t Ctrl+D", IDM_DELMENU, GRAYED MENUITEM SEPARATOR MENUITEM "退出(&X)", IDM_EXIT END MENUITEM "帮助(&H)", IDM_HELP END MENU ACCELERATORS MOVEABLE PURE BEGIN "^P", IDM_ADDMENU, ASCII "^D", IDM_DELMENU, ASCII END
运行结果如下:
可以测试,快捷键都是可以使用的。
来自清华大学MOOC课件
相关文章推荐
- C语言基础:数组 分类: iOS学习 c语言基础 2015-06-10 21:40 7人阅读 评论(0) 收藏
- 利用GDI+基于WIN32实现桌面雪花效果(一)
- hdu 5242 Game(dfs+线段树)
- C语言基础:进制转换,变量,常量,表达式,基本数据类型,输出函数,输入函数,运算符.
- 泛函编程(29)-泛函实用结构:Trampoline-不再怕StackOverflow
- C语言基础:进制转换,变量,常量,表达式,基本数据类型,输出函数,输入函数,运算符. 分类: iOS学习 c语言基础 2015-06-10 21:39 25人阅读 评论(0) 收藏
- 基于iTextSharp的PDF操作(PDF打印,PDF下载)
- 当你寂寞的时候
- C++解析和初始化
- 组合数
- Opencv 报错:vector subscript out of range
- python 多线程
- ActionResult
- 【学习笔记】【C语言】选择结构-switch
- 完全卸载oracle11g步骤(转)
- LightOJ1408(数学期望与概率)
- Codeforces #283 Div 1 简要题解
- maven失败测试用例rerun插件使用方法
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
- yum安装时报错