#include <windows.h>
#include "menudemo.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
char szAppName[]="MenuDemo";
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,PSTR szCmdLine,int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASSEX secwndclass;
HACCEL Accel;
secwndclass.cbSize = sizeof(secwndclass);
secwndclass.style = CS_HREDRAW|CS_VREDRAW;
secwndclass.lpfnWndProc=WndProc;
secwndclass.cbClsExtra = 0;
secwndclass.cbWndExtra = 0;
secwndclass.hInstance = hInstance;
secwndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
secwndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
secwndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
secwndclass.lpszMenuName = szAppName;
secwndclass.lpszClassName = szAppName;
secwndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION); //Register the windowclass
RegisterClassEx(&secwndclass);
hwnd = CreateWindow(szAppName,"菜单示例",WS_OVERLAPPED,0,0,800,600,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
Accel = LoadAccelerators(hInstance,"ACCELERATOR");
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(hwnd,Accel,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam)
{
static int iColorID[5]={WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACK_BRUSH};
static int iSelection = IDM_WHITE;
HMENU hMenu;
switch(iMsg)
{
case WM_COMMAND:
hMenu = GetMenu(hwnd);
switch(LOWORD(wParam))
{
case IDM_NEW:
case IDM_OPEN:
case IDM_SAVE:
case IDM_SAVEAS:
MessageBeep(0);
return 0;
case IDM_EXIT:
SendMessage(hwnd,WM_CLOSE,0,0);
return 0;
case IDM_UNDO:
case IDM_CUT:
case IDM_COPY:
case IDM_PASTE:
case IDM_DEL:
MessageBeep(0);
return 0;
case IDM_WHITE:
case IDM_LTGRAY:
case IDM_GRAY:
case IDM_DKGRAY:
case IDM_BLACK:
CheckMenuItem(hMenu,iSelection,MF_UNCHECKED);
iSelection=LOWORD(wParam);
CheckMenuItem(hMenu,iSelection,MF_CHECKED);
SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(iColorID[LOWORD(wParam)-IDM_WHITE]));
InvalidateRect(hwnd,NULL,TRUE);
return 0;
case IDM_START:
if(SetTimer(hwnd,1,1000,NULL))
{
EnableMenuItem(hMenu,IDM_START,MF_GRAYED);
EnableMenuItem(hMenu,IDM_STOP,MF_ENABLED);
}
return 0;
case IDM_STOP:
KillTimer(hwnd,1);
EnableMenuItem(hMenu,IDM_START,MF_ENABLED);
EnableMenuItem(hMenu,IDM_STOP,MF_GRAYED);
return 0;
case IDM_HELP:
MessageBox(hwnd,"Help not yet implemented.",szAppName,MB_ICONEXCLAMATION|MB_OK);
return 0;
case IDM_ABOUT:
MessageBox(hwnd,"Menu Demonstration Program.",szAppName,MB_ICONINFORMATION|MB_OK);
return 0;
}
break;
case WM_TIMER:
MessageBeep(0);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,iMsg,wParam,lParam);
}

解决方案 »

  1.   

    你的菜单在那里??最好用菜单ID来加载菜单,用名字的方法你又搞不清楚来龙去脉...
    你创建一个菜单时都会给你一个ID的,还有,你编辑菜单时直接用资源编辑器来做即可,没必要去手工编辑RC文件
      

  2.   

    这样的问题一般都只能通过和标准的程序比较才能知道问题所在,而且的问题出在参数上,比如有时传NULL对,而传hwnd就不对。
      

  3.   


    菜单是IDR_MENU 101
    能麻烦能讲具体一点吗?谢谢。。新手上路。。
      

  4.   


    secwndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); // 这样来加载菜单,IDR_MENU1是菜单的ID,在资源编辑器里可以看到
      

  5.   

    [email protected] 把工程压缩发来,我改好给你,只能这样帮新手了,要不费了时间又不知道你是什么原因造成的,建议你找本windows程序设计这本书来看,里面都讲得非常详细的