照书上抄的代码,但是我的菜单出不来,只有一个空白的窗口。
我已经建立了一个resource files ,其中建立了菜单,但是在GetMenu()中没有弄出来菜单啊!怎么回事,请指教!
是我建立菜单的方法错了吗?
#include <windows.h>
#include <E:\Program Files\My Document\Visual c++\Menu\Menu\menudemo.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
char szAppName[] = "MenuDemo";int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  PSTR szCmdLine, int iCmdShow)
{
HMENU hMenu;
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
HACCEL Accel;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
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 = szAppName;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
RegisterClassEx(&wndclass);
hMenu = LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));
hwnd = CreateWindow(szAppName,"菜单示例",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
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,0L);
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]));
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;
}
break;
case WM_TIMER:
MessageBeep(0);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,iMsg,wParam,lParam);
}

解决方案 »

  1.   

    照书呢,估计不是代码出了问题,是你的菜单,ID可能没有设对,书上自己NEW了个菜单,他又不说,只是写代码,你怎么知道呢,所以找他光盘里的代码来对对就知道了.是资源文件下你好好看看菜单ID
      

  2.   

    CreateWindow的倒数第3个参数给hMenu。
      

  3.   

    不好意思,你是在控制台下NEW空口,看错,以为是在MFC下..
      

  4.   

    wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1));
    RegisterClassEx(&wndclass);