vc++从入门到精通第七章
发表在C语言图书答疑 2014-10-21
是否精华
版块置顶:
图标菜单c:\program files\microsoft visual studio\myprojects\图标菜单\menuicon.h(31) : error C2065: 'MAX_MENUCOUNT' : undeclared identifier
c:\program files\microsoft visual studio\myprojects\图标菜单\menuicon.h(31) : error C2057: expected constant expression
c:\program files\microsoft visual studio\myprojects\图标菜单\menuicon.h(31) : warning C4200: nonstandard extension used : zero-sized array in struct/union
c:\program files\microsoft visual studio\myprojects\图标菜单\menuicon.h(32) : error C2229: class 'CMenuIcon' has an illegal zero-sized array出现以下错误该怎么解决
分享到:
精彩评论 11
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2014-10-22
沙发
'MAX_MENUCOUNT' 这个没有定义啊,这个例子具体是实例多少?我测试一下,是否也出现这样的错误
学分: LV1
TA的每日心情
开心
2020-04-03 20:21:35
2014-10-23
板凳
struct CMenuItem
{
CString m_ItemText;
int m_IconIndex;
int m_ItemID;
};

class CMenuIcon : public CMenu
{
// Construction
public:
CMenuIcon();
BOOL MenuItem(CMenu*pMenu);
BOOL AttatchMenu(UINT m_uID);
void DrawItemText(CDC*pDC,LPSTR Str,CRect Rect);
void DrawItemIcon(CDC*pDC,CRect Rect,int Icon);
void DrawSeparater(CDC*pDC,CRect Rect);
void DrawComMenu(CDC*pDC,CRect Rect,BOOL Selected);
void DrawTopMenu(CDC*pDC,CRect Rect,BOOL Selected);
virtual ~CMenuIcon();
CMenuItem m_ItemLists[MAX_MENUCOUNT];
int m_Index;
int m_IconIndex;
CImageList m_ImageList;
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpStruct);
virtual void DrawItem(LPDRAWITEMSTRUCT lpStruct);

};
学分: LV1
TA的每日心情
开心
2020-04-03 20:21:35
2014-10-23
地板
CMenuIcon::CMenuIcon()
{
m_Index=0;
m_IconIndex=0;
m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,0,0);
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));
}

CMenuIcon::~CMenuIcon()
{
}
BOOL CMenuIcon::AttatchMenu(UINT m_uID)
{
LoadMenu(m_uID);
return TRUE;
}
BOOL CMenuIcon::MenuItem(CMenu*pMenu)
{
if(pMenu!=NULL)
{
int m_Count=pMenu->GetMenuItemCount();
for(int i=0;i<m_Count;i++)
{
//获得菜单文本
pMenu->GetMenuString(i,m_ItemLists[m_Index].m_ItemText,MF_BYPOSITION);
int m_itemID=pMenu->GetMenuItemID(i);
m_ItemLists[m_Index].m_ItemID=m_itemID;
if(m_itemID>0)
{
m_ItemLists[m_Index].m_IconIndex=m_IconIndex;
m_IconIndex+=1;
}
//修改菜单信息
pMenu->ModifyMenu(i,MF_OWNERDRAW|MF_BYPOSITION|MF_STRING,
m_ItemLists[m_Index].m_ItemID,(LPSTR)&(m_ItemLists[m_Index]));
m_Index+=1;
CMenu*m_SubMenu=pMenu->GetSubMenu(i);
if(m_SubMenu)
{
MenuItem(m_SubMenu);
}
}
}
return TRUE;
}
void CMenuIcon::MeasureItem(LPMEASUREITEMSTRUCT lpStruct)
{
if(lpStruct->CtlType==ODT_MENU)
{
lpStruct->itemHeight = ITEMHEIGHT;
lpStruct->itemWidth = ITEWIDTH;
CMenuItem*m_item;
m_item=(CMenuItem*)lpStruct->itemData;
//设置菜单项宽度
lpStruct->itemWidth=((CMenuItem*)lpStruct->itemData)->m_ItemText.GetLength()*10;
if(m_item->m_ItemID==0)
{
lpStruct->itemHeight=2;
}
}
}
void CMenuIcon::DrawItemText(CDC*pDC,LPSTR Str,CRect Rect)
{
pDC->DrawText(Str,Rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
void CMenuIcon::DrawItemIcon(CDC*pDC,CRect Rect,int Icon)
{
m_ImageList.Draw(pDC,Icon,CPoint(Rect.left+2,Rect.top+4),ILD_TRANSPARENT);
}
void CMenuIcon::DrawSeparater(CDC*pDC,CRect Rect)
{
pDC->Draw3dRect(Rect,RGB(255,0,255),RGB(255,0,255));
}
void CMenuIcon::DrawTopMenu(CDC*pDC,CRect Rect,BOOL Selected)
{
if(Selected)
{
pDC->Rectangle(&Rect);
Rect.DeflateRect(1,1);
pDC->FillSolidRect(Rect,RGB(190,170,220));
}
else
{
pDC->FillSolidRect(&Rect,RGB(192,192,192));
}
}
void CMenuIcon::DrawComMenu(CDC*pDC,CRect Rect,BOOL Selected)
{
if(Selected)
{
pDC->Rectangle(Rect);
Rect.DeflateRect(1,1);
pDC->FillSolidRect(Rect,RGB(255,255,255));
}
}
void CMenuIcon::DrawItem(LPDRAWITEMSTRUCT lpStruct)
{
if(lpStruct->CtlType==ODT_MENU)
{
if(lpStruct->itemData==NULL)return;
unsigned int m_state=lpStruct->itemState;
CDC* pDC=CDC::FromHandle(lpStruct->hDC);
CString str=((CMenuItem*)(lpStruct->itemData))->m_ItemText;
LPSTR m_str=str.GetBuffer(str.GetLength());
int m_itemID=((CMenuItem*)(lpStruct->itemData))->m_ItemID;
int m_itemicon=((CMenuItem*)(lpStruct->itemData))->m_IconIndex;
CRect m_rect=lpStruct->rcItem;
pDC->SetBkMode(TRANSPARENT);
switch(m_itemID)
{
case -1:
{
//绘制顶层菜单
DrawTopMenu(pDC,m_rect,(m_state&ODS_SELECTED)||(m_state&0X0040));
DrawItemText(pDC,m_str,m_rect);
break;
}
case 0:
{
DrawSeparater(pDC,m_rect);
break;
}
default:
{
DrawComMenu(pDC,m_rect,m_state&ODS_SELECTED);
DrawItemText(pDC,m_str,m_rect);
DrawItemIcon(pDC,m_rect,m_itemicon);
break;
}
}
}
}
学分: LV1
TA的每日心情
开心
2020-04-03 20:21:35
2014-10-23
4L
// TODO: Add extra initialization here
m_Menu.AttatchMenu(IDR_MENU1);
m_Menu.MenuItem(&m_Menu);
this->SetMenu(&m_Menu);

return TRUE;  // return TRUE  unless you set the focus to a control
}
学分: LV1
TA的每日心情
开心
2020-04-03 20:21:35
2014-10-23
5L
#define MAX_MENUCOUNT
#include"MenuIcon.h"
学分: LV1
TA的每日心情
开心
2020-04-03 20:21:35
2014-10-23
6L
CMenuIcon m_Menu;
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2014-10-24
7L
[FIELDSET][LEGEND]引自:2楼[/LEGEND]
struct CMenuItem
{
CString m_ItemText;
int m_IconIndex;
int m_ItemID;
};

class CMenuIcon : public CMenu
{
// Construction
public:
CMenuIcon();
BOOL MenuItem(CMenu*pMenu);
BOOL AttatchMenu(UINT m_uID);
void DrawItemText(CDC*pDC,LPSTR Str,CRect Rect);
void DrawItemIcon(CDC*pDC,CRect Rect,int Icon);
void DrawSeparater(CDC*pDC,CRect Rect);
void DrawComMenu(CDC*pDC,CRect Rect,BOOL Selected);
void DrawTopMenu(CDC*pDC,CRect Rect,BOOL Selected);
virtual ~CMenuIcon();
CMenuItem m_ItemLists[MAX_MENUCOUNT];
int m_Index;
int m_IconIndex;
CImageList m_ImageList;
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpStruct);
virtual void DrawItem(LPDRAWITEMSTRUCT lpStruct);

};
[/FIELDSET]

回复:在上面定义:const int MAX_MENUCOUNT = 60,ITEMHEIGHT = 26,ITEMWIDTH = 120;定义菜单项数量
  
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2014-10-24
8L
[FIELDSET][LEGEND]引自:5楼[/LEGEND]
#define MAX_MENUCOUNT
#include"MenuIcon.h"
[/FIELDSET]

回复:不用在这定义MAX_MENUCOUNT,在MenuIcon.h中已经定义完了
  
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2014-10-24
9L
[FIELDSET][LEGEND]引自:6楼[/LEGEND]
CMenuIcon m_Menu;
[/FIELDSET]

回复:这是在对话框头文件中定义的
  
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2014-10-24
10L
写完之后,可以对照光盘中的源文件,进行修改
首页上一页 12 下一页尾页 11 条记录 1/2页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照