大家能看出下面程序的错误吗?
#include<afxwin.h>
#include "resource.h"
class MyFrame:public CFrameWnd
{
private:
CMenu MainMenu,*SysMenu,*PopMenu,*SubMenu;
COLORREF color;
public:
MyFrame()
{
Create(NULL,_T("Menu"),WS_OVERLAPPEDWINDOW|WS_VISIBLE,rectDefault,NULL,MAKEINTRESOURCE(IDR_SMENU));
SysMenu=GetSystemMenu(false);
SysMenu->AppendMenuW (IDM_INSERT,MF_SEPARATOR);
SysMenu->AppendMenuW (MF_STRING,IDM_INSERT,_T("Insert by me1"));
color=RGB(255,0,0);
}
afx_msg void OnSwitchMenu()
{
CMenu InsMenu;
InsMenu.LoadMenuW (IDR_INSMENU);
MainMenu.LoadMenuW (IDR_MAINMENU);
MainMenu.AppendMenuW (MF_POPUP,(UINT)InsMenu.m_hMenu ,_T("Color Menu"));
SubMenu=MainMenu.GetSubMenu (1);
SubMenu->AppendMenuW (MF_SEPARATOR);
SubMenu->InsertMenuW (IDM_CreateItem,MF_BYCOMMAND|MF_STRING,IDM_InsertItem,_T("Insert item"));
SubMenu->InsertMenuW (IDM_CreateItem,MF_BYCOMMAND|MF_POPUP,(UINT)InsMenu.m_hMenu ,_T("Insert a SubMenu"));
SetCheck();
SubMenu->InsertMenuW (IDM_CreateItem,MF_BYCOMMAND|MF_SEPARATOR);
InsMenu.Detach ();
SetMenu(&MainMenu);
}
afx_msg void OnCreateItem()
{
MainMenu.ModifyMenuW (IDM_CreateItem,MF_BYCOMMAND,IDM_DeleteItem,_T("delete item"));
SubMenu=MainMenu.GetSubMenu (1);
SubMenu->AppendMenuW (MF_STRING,IDM_NewItem,_T("NEW Item"));
}
afx_msg void OnDeleteItem()
{
MainMenu.ModifyMenuW (IDM_DeleteItem,MF_BYCOMMAND,IDM_CreateItem,_T("Create Item"));
SubMenu=MainMenu.GetSubMenu (IDM_NewItem);
}
afx_msg void OnContextMenu(CWnd *pWnd, CPoint point)
{
CMenu menu;
menu.LoadMenuW (IDR_POPMENU);
PopMenu=menu.GetSubMenu (0);
PopMenu->TrackPopupMenu (TPM_CENTERALIGN|TPM_RIGHTBUTTON,point.x,point.y ,this);
menu.Detach ();
}
afx_msg void OnRed()
{
SetUnCheck();
color=RGB(255,0,0);
SetCheck();
}
afx_msg void OnGreen()
{
SetUnCheck();
color=RGB(0,255,0);
SetCheck();
}
afx_msg void OnBlue()
{
SetUnCheck();
color=RGB(0,0,255);
SetCheck();
}
void SetCheck()
{
switch(color)
{
case RGB(255,0,0):
MainMenu.CheckMenuItem (IDM_RED, MF_BYCOMMAND|MF_CHECKED);
break;
case RGB(0,255,0):
MainMenu.CheckMenuItem (IDM_RED, MF_BYCOMMAND|MF_CHECKED);
break;
case RGB(0,0,255):
MainMenu.CheckMenuItem (IDM_RED, MF_BYCOMMAND|MF_CHECKED);
break;
}
}
void SetUnCheck()
{
switch(color)
{
case RGB(255,0,0):
MainMenu.CheckMenuItem (IDM_RED, MF_BYCOMMAND|MF_UNCHECKED);
break;
case RGB(0,255,0):
MainMenu.CheckMenuItem (IDM_RED, MF_BYCOMMAND|MF_UNCHECKED);
break;
case RGB(0,0,255):
MainMenu.CheckMenuItem (IDM_RED, MF_BYCOMMAND|MF_UNCHECKED);
break;
}
}
afx_msg void OnButtonUp(UINT nFlags,CPoint point)
{
ReleaseCapture();
}
afx_msg void OnButtonDown(UINT nFlags,CPoint point)
{
SetCapture();
}
afx_msg void OnMouseMove(UINT nFlags, CPoint point)
{
if(this==GetCapture())
{
CClientDC aDC(this);
aDC.SetPixel (point,color);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MASSAGE_MAP(MyFrame,CFrameWnd)
ON_COMMAND(IDR_SwitchMenu,OnSwitchMenu)
ON_COMMAND(IDM_CreateItem,OnCreateItem)
ON_COMMAND(IDM_DeleteItem,OnDeleteItem)
ON_COMMAND(IDM_RED,OnRed)
ON_COMMAND(IDM_GREEN,OnGreen)
ON_COMMAND(IDM_BLUE,OnBule)
ON_WM_CONTEXTMENU()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
class MyApp:public CWinApp
{
public:
BOOL InitInstance()
{
CFrameWnd *Frame=new MyFrame;
m_pMainWnd=Frame;
Frame->ShowWindow (SW_SHOW);
return true;
}
}a_app;
从语法上说,应该没有什么错误,可是调试的时候,缺出现大量的编译错误。
光标停留在消息映射区域
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>f:/project/dialog/dialog/dialog.cpp(147) : error C2065: “OnSwitchMenu”: 未声明的标识符
1>f:/project/dialog/dialog/dialog.cpp(147) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>f:/project/dialog/dialog/dialog.cpp(147) : warning C4508: “BEGIN_MASSAGE_MAP”: 函数应返回一个值;假定“void”返回类型
1>f:/project/dialog/dialog/dialog.cpp(147) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(148) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(148) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(148) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(149) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(149) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(149) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(150) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(150) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(150) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(151) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(151) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(151) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(152) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(152) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(152) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(153) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(153) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(153) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(154) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(154) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(154) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(155) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(155) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(155) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(156) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(156) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(156) : error C2059: 语法错误 : “,”
1>f:/project/dialog/dialog/dialog.cpp(157) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(157) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(157) : error C2059: 语法错误 : “}”
1>f:/project/dialog/dialog/dialog.cpp(157) : error C2653: “TheBaseClass”: 不是类或命名空间名称
1>f:/project/dialog/dialog/dialog.cpp(157) : error C2065: “GetThisMessageMap”: 未声明的标识符
1>f:/project/dialog/dialog/dialog.cpp(157) : error C2065: “_messageEntries”: 未声明的标识符
1>f:/project/dialog/dialog/dialog.cpp(157) : error C2059: 语法错误 : “return”
1>f:/project/dialog/dialog/dialog.cpp(157) : error C2059: 语法错误 : “}”
1>f:/project/dialog/dialog/dialog.cpp(159) : error C2059: 语法错误 : “public”
1>f:/project/dialog/dialog/dialog.cpp(160) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:/project/dialog/dialog/dialog.cpp(160) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>f:/project/dialog/dialog/dialog.cpp(169) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
很奇怪的是,我命名写了afx_msg void OnSwitchMenu()函数,但却出现编译错误,error C2065: “OnSwitchMenu”: 未声明的标识符。
难到是我创建的资源文件有误??