代码如下:#include <windows.h>
#include "resource.h"#define ID_TIMER 1LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;TCHAR szAppName[] = TEXT ("MenuDemo") ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{HWND hwnd ;
MSG msg;
WNDCLASS 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 ;if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow( szAppName, // window class name
TEXT ("MenuDemonstration"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int idColor[5]={WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACK_BRUSH};
static int iSelection=IDM_BKGND_WHITE;
HMENU hMenu;
switch (message)
{
case WM_COMMAND:
hMenu=GetMenu(hwnd);
switch(LOWORD(wParam))
{
case IDM_FILE_NEW:
case IDM_FILE_OPEN:
case IDM_FILE_SAVE:
case IDM_FILE_SAVE_AS:
MessageBeep(0);
return 0;
case IDM_APP_EXIT:
SendMessage(hwnd,WM_CLOSE,0,0);
return 0; case IDM_EDIT_UNDO:
case IDM_EDIT_CUT:
case IDM_EDIT_COPY:
case IDM_EDIT_PASTE:
case IDM_EDIT_CLEAR:
MessageBeep(0);
return 0; case IDM_BKGND_WHITE:
case IDM_BKGND_LTGRAY:
case IDM_BKGND_GRAY:
case IDM_BKGND_DKGRAY:
case IDM_BKGND_BLACK:CheckMenuItem(hMenu,iSelectiom,MF_UNCHECKED);
iSelection=LOWORD(wParam);
CheckMenuItem(hMenu,iSelectiom,MF_CHECKED);SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(idColor[LOWORD(wParam)-IDM_BKGND_WHITE]));InvalidateRect(hwnd,NULL,TRUE);
return 0; case IDM_TIMER_START:
if(SetTimer(hwnd,ID_TIMER,1000,NULL))
{
EnableMenuItem(hMenu,IDM_TIMER_START,MF_GRAYED);
EnableMenuItem(hMenu,IDM_TIMER_STOP,MF_ENABLED);
}
return 0; case IDM_TIMER_STOP:
KillTimer(hwnd,ID_TIMER);
EnableMenuItem(hMenu,IDM_TIMER_START,MF_ENABLED);
EnableMenuItem(hMenu,IDM_TIMER_STOP,MF_GRAYED);
return 0; case IDM_APP_HELP:
MessageBox(hwnd,TEXT("Help not yet implemented!"),szAppName,MB_ICONEXCLAMATION|MB_OK);
return 0;
case IDM_APP_ABOUT:
MessageBox(hwnd,TEXT("MenuDemonstration Program\n")
TEXT("(C)Charles Petzold,1998"),
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, message, wParam, lParam) ;
}
#include "resource.h"#define ID_TIMER 1LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;TCHAR szAppName[] = TEXT ("MenuDemo") ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{HWND hwnd ;
MSG msg;
WNDCLASS 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 ;if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow( szAppName, // window class name
TEXT ("MenuDemonstration"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int idColor[5]={WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACK_BRUSH};
static int iSelection=IDM_BKGND_WHITE;
HMENU hMenu;
switch (message)
{
case WM_COMMAND:
hMenu=GetMenu(hwnd);
switch(LOWORD(wParam))
{
case IDM_FILE_NEW:
case IDM_FILE_OPEN:
case IDM_FILE_SAVE:
case IDM_FILE_SAVE_AS:
MessageBeep(0);
return 0;
case IDM_APP_EXIT:
SendMessage(hwnd,WM_CLOSE,0,0);
return 0; case IDM_EDIT_UNDO:
case IDM_EDIT_CUT:
case IDM_EDIT_COPY:
case IDM_EDIT_PASTE:
case IDM_EDIT_CLEAR:
MessageBeep(0);
return 0; case IDM_BKGND_WHITE:
case IDM_BKGND_LTGRAY:
case IDM_BKGND_GRAY:
case IDM_BKGND_DKGRAY:
case IDM_BKGND_BLACK:CheckMenuItem(hMenu,iSelectiom,MF_UNCHECKED);
iSelection=LOWORD(wParam);
CheckMenuItem(hMenu,iSelectiom,MF_CHECKED);SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(idColor[LOWORD(wParam)-IDM_BKGND_WHITE]));InvalidateRect(hwnd,NULL,TRUE);
return 0; case IDM_TIMER_START:
if(SetTimer(hwnd,ID_TIMER,1000,NULL))
{
EnableMenuItem(hMenu,IDM_TIMER_START,MF_GRAYED);
EnableMenuItem(hMenu,IDM_TIMER_STOP,MF_ENABLED);
}
return 0; case IDM_TIMER_STOP:
KillTimer(hwnd,ID_TIMER);
EnableMenuItem(hMenu,IDM_TIMER_START,MF_ENABLED);
EnableMenuItem(hMenu,IDM_TIMER_STOP,MF_GRAYED);
return 0; case IDM_APP_HELP:
MessageBox(hwnd,TEXT("Help not yet implemented!"),szAppName,MB_ICONEXCLAMATION|MB_OK);
return 0;
case IDM_APP_ABOUT:
MessageBox(hwnd,TEXT("MenuDemonstration Program\n")
TEXT("(C)Charles Petzold,1998"),
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, message, wParam, lParam) ;
}
[code=C/C++]
#include <windows.h>
//#include "resource.h"
#define ID_TIMER 1
#define IDM_FILE_NEW 103
#define IDM_FILE_OPEN 104
#define IDM_FILE_SAVE 105
#define IDM_FILE_SAVE_AS 106 #define IDM_EDIT_UNDO 107
#define IDM_EDIT_CLEAR 108
#define IDM_EDIT_CUT 201
#define IDM_EDIT_COPY 202
#define IDM_EDIT_PASTE 203 #define IDM_BKGND_WHITE 204
#define IDM_BKGND_LTGRAY 205
#define IDM_BKGND_GRAY 206
#define IDM_BKGND_DKGRAY 207
#define IDM_BKGND_BLACK 208 #define IDM_APP_EXIT 209 #define IDM_TIMER_START 210
#define IDM_TIMER_STOP 211
#define IDM_APP_HELP 212
#define IDM_APP_ABOUT 213 #define ID_TIMER 1LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;TCHAR szAppName[] = TEXT ("MenuDemo") ;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
HWND hwnd ;
MSG msg;
WNDCLASS 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 ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow( szAppName, // window class name
TEXT ("MenuDemonstration"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int idColor[5]={WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACK_BRUSH};
static int iSelection=IDM_BKGND_WHITE;
HMENU hMenu;
switch (message)
{
case WM_COMMAND:
hMenu=GetMenu(hwnd);
switch(LOWORD(wParam))
{
case IDM_FILE_NEW:
case IDM_FILE_OPEN:
case IDM_FILE_SAVE:
case IDM_FILE_SAVE_AS:
MessageBeep(0);
return 0;
case IDM_APP_EXIT:
SendMessage(hwnd,WM_CLOSE,0,0);
return 0;
case IDM_EDIT_UNDO:
case IDM_EDIT_CUT:
case IDM_EDIT_COPY:
case IDM_EDIT_PASTE:
case IDM_EDIT_CLEAR:
MessageBeep(0);
return 0;
case IDM_BKGND_WHITE:
case IDM_BKGND_LTGRAY:
case IDM_BKGND_GRAY:
case IDM_BKGND_DKGRAY:
case IDM_BKGND_BLACK:
// CheckMenuItem(hMenu,iSelectiom,MF_UNCHECKED);
iSelection=LOWORD(wParam);
// CheckMenuItem(hMenu,iSelectiom,MF_CHECKED);
SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(idColor[LOWORD(wParam)-IDM_BKGND_WHITE]));
InvalidateRect(hwnd,NULL,TRUE);
return 0;
case IDM_TIMER_START:
if(SetTimer(hwnd,ID_TIMER,1000,NULL))
{
EnableMenuItem(hMenu,IDM_TIMER_START,MF_GRAYED);
EnableMenuItem(hMenu,IDM_TIMER_STOP,MF_ENABLED);
}
return 0;
case IDM_TIMER_STOP:
KillTimer(hwnd,ID_TIMER);
EnableMenuItem(hMenu,IDM_TIMER_START,MF_ENABLED);
EnableMenuItem(hMenu,IDM_TIMER_STOP,MF_GRAYED);
return 0;
// case IDM_APP_HELP:
// MessageBox(hwnd,TEXT("Help not yet implemented!"),szAppName,MB_ICONEXCLAMATION ¦MB_OK);
// return 0;
// case IDM_APP_ABOUT:
// MessageBox(hwnd,TEXT("MenuDemonstration Program\n")
// TEXT("(C)Charles Petzold,1998"),
// 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, message, wParam, lParam) ;
}
[code=C/C++]
resource.h文件中没有对应的宏定义,所以编译出错。这估计是你在其它地方复制过来的代码吧,没有复制相应的resource.h和.rc文件。
在看看书中的资源描述档案
该添加什么就添加什么
你的szAppName是MenuDemo,当然显示不了,还有CreateWindow方法中也必须指定菜单