菜单的建立和CMenu类的使用

大家能看出下面程序的错误吗?

#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”: 未声明的标识符。

难到是我创建的资源文件有误??

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值