菜单分类
窗口的顶层菜单
弹出式菜单
系统菜单
HMENU类型表示菜单,ID表示菜单项。
资源相关
资源脚本文件:*.rc文件
编译器:RC.EXE
CL.EXE
.c/.cpp ------------------> .obj
RC.EXE
.rc ----------------------> .res
LINK.EXE
.obj + .res --------------> .exe
菜单资源的使用
添加菜单资源
加载菜单资源
1>注册窗口类时设置菜单
wc.lpszMenuName=(char*)IDR_MENU1;
2>创建窗口传参设置菜单
HMENU hMenu=LoadMenu(hIns,(char*)IDR_MENU1);
HWND hWnd=CreateWindowEx(0,"WinMenu","window",WS_OVERLAPPEDWINDOW,100,100,500,500,NULL,hMenu,hIns,NULL);
3>在主窗口WM_CREATE消息中利用SetMenu函数设置菜单
HMENU hMenu=LoadMenu(g_hInstance,(char*)IDR_MENU1);
SetMenu(hWnd,hMenu);
加载菜单资源
HMENU LoadMenu(
HINSTANCE hInstance,//handle to module
LPCTSTR lpMenuName//menu name or resource identifier
);
菜单在工程目录下得资源代码
IDR_MENU1 MENU
BEGIN
POPUP "文件"
BEGIN
MENUITEM "新建", ID_NEW
MENUITEM SEPARATOR
MENUITEM "退出", ID_EXIT
END
POPUP "帮助"
BEGIN
MENUITEM "关于", ID_ABOUT
END
END
命令消息(WM_COMMAND)处理
附带信息:
wParam: HIWORD - 对于菜单为0 LOWORD - 菜单项的ID
lParam - 对于菜单为0
switch(msgID){
case WM_COMMAND:
OnCommand(hWnd,wParam);
break;
}
void OnCommand(HWND hWnd,WPARAM wParam){
switch(LOWORD(wParam)){
case ID_NEW:
MessageBox(hWnd,"新建被点击"," Infor",MB_OK);
break;
case ID_EXIT:
MessageBox(hWnd,"退出被点击","Infor",MB_OK);
break;
case ID_ABOUT:
MessageBox(hWnd,"关于被点击","Infor",MB_OK);
break;
}
}