MOOC清华《VC++面向对象与可视化程序设计》第5章:菜单资源例程(创建统计计算菜单项)

#include "windows.h"                      
#include "001.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";
	char lpszClassName[] = "菜单"; 
	char lpszTitle[]= "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,"求和");
        				AppendMenu(haddmenu,MF_ENABLED,IDM_fangcha,"方差");
						AppendMenu(haddmenu,MF_ENABLED,IDM_pinjunzhi,"平均值");
					    AppendMenu(haddmenu,MF_ENABLED,IDM_junfanggen,"均方根");
	       				//将创建的弹出式菜单插入主菜单中
						InsertMenu(hmenu,2,MF_POPUP|MF_BYPOSITION,(UINT)haddmenu,"统计计算(&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;
}


#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

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 001.rc 使用
//
#define IDR_MENU1                       101

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值