#include"windows.h"
#include"stdlib.h"
#include"string.h"
#include"caidan.h"
long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
HWND hWndMain;
HWND hWnd;
HMENU hMenu,hPraintMenu;
bool Create=TRUE;
char lpszMenuName[]="Menu";
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{MSG Message;
HACCEL hAccel;
if(!InitWindowsClass( hInstance))
return FALSE;
if(!InitWindows( hInstance, nCmdShow))
return FALSE;
hAccel=LoadAccelerators(hInstance,lpszMenuName);
while(GetMessage(&Message,NULL,0,0))
{if(!TranslateAccelerator(hWnd,hAccel,&Message))
{TranslateMessage(&Message);
DispatchMessage(&Message);}}
return Message.wParam;}
long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam)
{switch(iMessage)
{case   WM_LBUTTONDOWN:
if(Create)
{hMenu=GetMenu(hWnd);
hPraintMenu=CreateMenu();
AppendMenu(hPraintMenu,MF_GRAYED,IDM_DELETE,"删除计算总和");
AppendMenu(hPraintMenu,MF_GRAYED,IDM_TIANJIAJISUAN,"添加计算平均值");
AppendMenu(hPraintMenu,MF_GRAYED,IDM_XIUGAIJISUAN,"修改计算均方差");
InsertMenu(hMenu,2,MF_POPUP|MF_BYPOSITION|MF_GRAYED,(UINT)hPraintMenu,"修改计算");
DrawMenuBar(hWnd);
Create=FALSE;}
break;
case WM_RBUTTONDOWN:
if(!Create)
{EnableMenuItem(hMenu,(UINT)hPraintMenu,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hPraintMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hPraintMenu,IDM_TIANJIAJISUAN,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hPraintMenu,IDM_XIUGAIJISUAN,MF_BYCOMMAND|MF_ENABLED);
DrawMenuBar(hWnd);}
break;
case WM_COMMAND:
hMenu=GetMenu(hWnd);
     if(LOWORD(wParam)==IDM_XIUGAIJISUAN)
ModifyMenu(hMenu,IDM_JUNFANGCHA,MF_BYCOMMAND,IDM_XIANXINNIHE,"线性拟合");
else if(LOWORD(wParam)==IDM_TIANJIAJISUAN)
     InsertMenu(hMenu,IDM_FANGCHA,MF_BYCOMMAND|MF_ENABLED,IDM_JISUANPINJUN,"计算平均值");
   else  if(LOWORD(wParam)==IDM_DELETE)
 DeleteMenu(hMenu,IDM_ADD,MF_BYCOMMAND);
else break;
DrawMenuBar(hWnd);
break;case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,iMessage,wParam,lParam);}
return 0;
}BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{HWND hWnd;
hMenu=LoadMenu(hInstance,"Menu");
hWnd=CreateWindow("菜单",                           
  "MY_NEW_EXAPLE",
  WS_OVERLAPPEDWINDOW,
0,
0,
CW_USEDEFAULT,
                    CW_USEDEFAULT,
NULL,
     hMenu,
hInstance,
NULL);

if(!hWnd)
   return FALSE;
hWndMain=hWnd;
ShowWindow( hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;}
BOOL InitWindowsClass(HINSTANCE hInstance)
{WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"END");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="菜单";
WndClass.lpszMenuName="Menu";
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}这是一个WIN32程序,这个程序可以运行但是case WM_COMMAND:
hMenu=GetMenu(hWnd);
     if(LOWORD(wParam)==IDM_XIUGAIJISUAN)
ModifyMenu(hMenu,IDM_JUNFANGCHA,MF_BYCOMMAND,IDM_XIANXINNIHE,"线性拟合");
else if(LOWORD(wParam)==IDM_TIANJIAJISUAN)
     InsertMenu(hMenu,IDM_FANGCHA,MF_BYCOMMAND|MF_ENABLED,IDM_JISUANPINJUN,"计算平均值");
   else  if(LOWORD(wParam)==IDM_DELETE)
 DeleteMenu(hMenu,IDM_ADD,MF_BYCOMMAND);
else break;
DrawMenuBar(hWnd);
break;这部分代码貌似执行不了,求高人指点该怎么修改?

解决方案 »

  1.   

    不好意思啊,我的意思是if(LOWORD(wParam)==IDM_XIUGAIJISUAN)
    ModifyMenu(hMenu,IDM_JUNFANGCHA,MF_BYCOMMAND,IDM_XIANXINNIHE,"线性拟合");
    else if(LOWORD(wParam)==IDM_TIANJIAJISUAN)
      InsertMenu(hMenu,IDM_FANGCHA,MF_BYCOMMAND|MF_ENABLED,IDM_JISUANPINJUN,"计算平均值");
      else if(LOWORD(wParam)==IDM_DELETE)
    DeleteMenu(hMenu,IDM_ADD,MF_BYCOMMAND这几句代码不能执行,也就是说我单击删除键时并不会删除某一个菜单,单击添加时也不会添加菜单这是为什么啊?谢谢